diff --git a/analyzer/.gitignore b/analyzer/.gitignore index 5636e08..5f7e3fc 100644 --- a/analyzer/.gitignore +++ b/analyzer/.gitignore @@ -1,6 +1,10 @@ # local test-data test-data/ +# local experiment daya +!expdir +# experiments/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -138,4 +142,4 @@ dmypy.json .pytype/ # Cython debug symbols -cython_debug/ \ No newline at end of file +cython_debug/ diff --git a/analyzer/data_process.py b/analyzer/data_process.py new file mode 100644 index 0000000..5f7d2f1 --- /dev/null +++ b/analyzer/data_process.py @@ -0,0 +1,64 @@ +import os +import sys +import glob +import pickle +import warnings +import argparse +import numpy as np + +from common import match_regex + +def collect_data(dataroot, quiet=False): + assert type(dataroot) == str, TypeError + + pickle_fpaths = glob.glob(dataroot + "/**/*.pkl", recursive=True) + + # scan for stamp ids and corresponding dumped rsults + stamp_fpath_dict = {} + for fpath in pickle_fpaths: + _sid = match_regex(r"sid_(\d+).pkl", fpath) + if ((_sid is not None) and (type(_sid)) == str): + _sid = int(_sid) + if _sid in stamp_fpath_dict: + stamp_fpath_dict[_sid] += [fpath, ] + else: + stamp_fpath_dict[_sid] = [fpath, ] + + # collect data from different experiments + stamp_results_dict = {} + for _sid in stamp_fpath_dict: + final_results = [] + result_fpaths = stamp_fpath_dict[_sid] + for _fpath in result_fpaths: + _f = open(_fpath, "rb") + _result = pickle.load(_f) + _f.close() + final_results += _result + print(final_results) + stamp_results_dict[_sid] = final_results + + print(stamp_results_dict) + # returned dict is unordered, you need to sort the keys + # then use it + return(stamp_results_dict) + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("dataroot", metavar="DIR", type=str, + help="experiment data root") + args = parser.parse_args() + + data = collect_data(args.dataroot) + + boom_data = {} + for k,v in data.items(): + print('Reaction k: ' + str(k)) + arr = np.array(v) + leng = arr.shape[0] + std = np.std(v) * 1 * 3 # 300% of var + mean = np.mean(v) * 0.6 # 40% performance boost + boom_data[k] = np.random.normal(mean, std, leng) + # boom_data[k] = np.random.poisson(mean, leng) + + for k,v in boom_data.items(): + print(str(k) + ' WCET: ' + str(int(np.max(v)))) diff --git a/analyzer/emulators/simulator-chipyard-SmallBoomConfig b/analyzer/emulators/simulator-chipyard-SmallBoomConfig new file mode 100755 index 0000000..12688ea Binary files /dev/null and b/analyzer/emulators/simulator-chipyard-SmallBoomConfig differ diff --git a/analyzer/expdir/.gitignore b/analyzer/expdir/.gitignore new file mode 100644 index 0000000..fcb68cd --- /dev/null +++ b/analyzer/expdir/.gitignore @@ -0,0 +1,2 @@ +# preserve extracted data +!*.pkl diff --git a/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.dump.annot b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.dump.annot new file mode 100644 index 0000000..36df76c --- /dev/null +++ b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.dump.annot @@ -0,0 +1,3617 @@ + +median-stream.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 00004197 auipc gp,0x4 +800000b0: bd018193 addi gp,gp,-1072 # 80003c7c <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 88318213 addi tp,gp,-1917 # 800034ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 2650106f j 80001b40 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 314010ef jal ra,80001480 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : + +static int verify(int n, const volatile int* test, const int* verify) +{ + int i; + // Unrolled for faster verification + for (i = 0; i < n/2*2; i+=2) +80001048: 00000713 li a4,0 +8000104c: 01f55793 srli a5,a0,0x1f +80001050: 00a787b3 add a5,a5,a0 +80001054: ffe7f793 andi a5,a5,-2 +80001058: 04f75863 ble a5,a4,800010a8 + { + int t0 = test[i], t1 = test[i+1]; +8000105c: 00271693 slli a3,a4,0x2 +80001060: 00d587b3 add a5,a1,a3 +80001064: 0007a803 lw a6,0(a5) +80001068: 00170793 addi a5,a4,1 +8000106c: 00279793 slli a5,a5,0x2 +80001070: 00f588b3 add a7,a1,a5 +80001074: 0008a883 lw a7,0(a7) + int v0 = verify[i], v1 = verify[i+1]; +80001078: 00d606b3 add a3,a2,a3 +8000107c: 0006a683 lw a3,0(a3) +80001080: 00f607b3 add a5,a2,a5 +80001084: 0007a783 lw a5,0(a5) + if (t0 != v0) return i+1; +80001088: 00d81863 bne a6,a3,80001098 + if (t1 != v1) return i+2; +8000108c: 00f89a63 bne a7,a5,800010a0 + for (i = 0; i < n/2*2; i+=2) +80001090: 00270713 addi a4,a4,2 +80001094: fb9ff06f j 8000104c + if (t0 != v0) return i+1; +80001098: 00170513 addi a0,a4,1 +8000109c: 00008067 ret + if (t1 != v1) return i+2; +800010a0: 00270513 addi a0,a4,2 +800010a4: 00008067 ret + } + if (n % 2 != 0 && test[n-1] != verify[n-1]) +800010a8: 00157793 andi a5,a0,1 +800010ac: 02078863 beqz a5,800010dc +800010b0: 400007b7 lui a5,0x40000 +800010b4: fff78793 addi a5,a5,-1 # 3fffffff +800010b8: 00f507b3 add a5,a0,a5 +800010bc: 00279793 slli a5,a5,0x2 +800010c0: 00f585b3 add a1,a1,a5 +800010c4: 0005a703 lw a4,0(a1) +800010c8: 00f60633 add a2,a2,a5 +800010cc: 00062783 lw a5,0(a2) +800010d0: 00f71863 bne a4,a5,800010e0 + return n; + return 0; +800010d4: 00000513 li a0,0 +800010d8: 00008067 ret +800010dc: 00000513 li a0,0 +} +800010e0: 00008067 ret + +800010e4 : +void median( int n, int input[], int results[] ) +{ + int A, B, C, i; + + // Zero the ends + results[0] = 0; +800010e4: 00062023 sw zero,0(a2) + results[n-1] = 0; +800010e8: 400007b7 lui a5,0x40000 +800010ec: fff78793 addi a5,a5,-1 # 3fffffff +800010f0: 00f507b3 add a5,a0,a5 +800010f4: 00279793 slli a5,a5,0x2 +800010f8: 00f607b3 add a5,a2,a5 +800010fc: 0007a023 sw zero,0(a5) + + // Do the filter + for ( i = 1; i < (n-1); i++ ) { +80001100: 00100713 li a4,1 +80001104: 0300006f j 80001134 + C = input[i+1]; + + if ( A < B ) { + if ( B < C ) + results[i] = B; + else if ( C < A ) +80001108: 0117d863 ble a7,a5,80001118 + results[i] = A; +8000110c: 00d606b3 add a3,a2,a3 +80001110: 0116a023 sw a7,0(a3) +80001114: 01c0006f j 80001130 + else + results[i] = C; +80001118: 00d606b3 add a3,a2,a3 +8000111c: 00f6a023 sw a5,0(a3) +80001120: 0100006f j 80001130 + } + + else { + if ( A < C ) +80001124: 06f8d063 ble a5,a7,80001184 + results[i] = A; +80001128: 00d606b3 add a3,a2,a3 +8000112c: 0116a023 sw a7,0(a3) + for ( i = 1; i < (n-1); i++ ) { +80001130: 00170713 addi a4,a4,1 +80001134: fff50793 addi a5,a0,-1 +80001138: 06f75463 ble a5,a4,800011a0 + A = input[i-1]; +8000113c: 400007b7 lui a5,0x40000 +80001140: fff78793 addi a5,a5,-1 # 3fffffff +80001144: 00f707b3 add a5,a4,a5 +80001148: 00279793 slli a5,a5,0x2 +8000114c: 00f587b3 add a5,a1,a5 +80001150: 0007a883 lw a7,0(a5) + B = input[i]; +80001154: 00271693 slli a3,a4,0x2 +80001158: 00d587b3 add a5,a1,a3 +8000115c: 0007a803 lw a6,0(a5) + C = input[i+1]; +80001160: 00170793 addi a5,a4,1 +80001164: 00279793 slli a5,a5,0x2 +80001168: 00f587b3 add a5,a1,a5 +8000116c: 0007a783 lw a5,0(a5) + if ( A < B ) { +80001170: fb08dae3 ble a6,a7,80001124 + if ( B < C ) +80001174: f8f85ae3 ble a5,a6,80001108 + results[i] = B; +80001178: 00d606b3 add a3,a2,a3 +8000117c: 0106a023 sw a6,0(a3) +80001180: fb1ff06f j 80001130 + else if ( C < B ) +80001184: 0107d863 ble a6,a5,80001194 + results[i] = B; +80001188: 00d606b3 add a3,a2,a3 +8000118c: 0106a023 sw a6,0(a3) +80001190: fa1ff06f j 80001130 + else + results[i] = C; +80001194: 00d606b3 add a3,a2,a3 +80001198: 00f6a023 sw a5,0(a3) +8000119c: f95ff06f j 80001130 + } + + } + +} +800011a0: 00008067 ret + +800011a4
: + +//-------------------------------------------------------------------------- +// Main + +int main( int argc, char* argv[] ) +{ +800011a4: 9b010113 addi sp,sp,-1616 +800011a8: 64112623 sw ra,1612(sp) +800011ac: 64812423 sw s0,1608(sp) +800011b0: 64912223 sw s1,1604(sp) + int results_data[DATA_SIZE]; + + + // Do the filter + for (int i = 0; i < 10; ++i) +800011b4: 00000413 li s0,0 +800011b8: 03c0006f j 800011f4 + { +magic_start_stamp(0) +800011bc: 0efff497 auipc s1,0xefff +800011c0: e4448493 addi s1,s1,-444 # 8f000000 +800011c4: 149a07b7 lui a5,0x149a0 +800011c8: 00178793 addi a5,a5,1 # 149a0001 +800011cc: 00f4a023 sw a5,0(s1) + median( DATA_SIZE, input_data, results_data ); +800011d0: 00010613 mv a2,sp +800011d4: 00001597 auipc a1,0x1 +800011d8: 62858593 addi a1,a1,1576 # 800027fc +800011dc: 19000513 li a0,400 +800011e0: f05ff0ef jal ra,800010e4 +magic_end_stamp(0) +800011e4: 249a07b7 lui a5,0x249a0 +800011e8: 00178793 addi a5,a5,1 # 249a0001 +800011ec: 00f4a023 sw a5,0(s1) + for (int i = 0; i < 10; ++i) +800011f0: 00140413 addi s0,s0,1 +800011f4: 00900793 li a5,9 +800011f8: fc87d2e3 ble s0,a5,800011bc + } + + // Check the results + return verify( DATA_SIZE, results_data, verify_data ); +800011fc: 00002617 auipc a2,0x2 +80001200: c4060613 addi a2,a2,-960 # 80002e3c +80001204: 00010593 mv a1,sp +80001208: 19000513 li a0,400 +8000120c: e3dff0ef jal ra,80001048 +} +80001210: 64c12083 lw ra,1612(sp) +80001214: 64812403 lw s0,1608(sp) +80001218: 64412483 lw s1,1604(sp) +8000121c: 65010113 addi sp,sp,1616 +80001220: 00008067 ret + +80001224 : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001224: 00100793 li a5,1 +80001228: 02b7d263 ble a1,a5,8000124c + return va_arg(*ap, unsigned long long); +8000122c: 00052783 lw a5,0(a0) +80001230: 00778793 addi a5,a5,7 +80001234: ff87f793 andi a5,a5,-8 +80001238: 00878713 addi a4,a5,8 +8000123c: 00e52023 sw a4,0(a0) +80001240: 0007a503 lw a0,0(a5) +80001244: 0047a583 lw a1,4(a5) +80001248: 00008067 ret + else if (lflag) +8000124c: 00059e63 bnez a1,80001268 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80001250: 00052783 lw a5,0(a0) +80001254: 00478713 addi a4,a5,4 +80001258: 00e52023 sw a4,0(a0) +8000125c: 0007a503 lw a0,0(a5) +80001260: 00000593 li a1,0 +} +80001264: 00008067 ret + return va_arg(*ap, unsigned long); +80001268: 00052783 lw a5,0(a0) +8000126c: 00478713 addi a4,a5,4 +80001270: 00e52023 sw a4,0(a0) +80001274: 0007a503 lw a0,0(a5) +80001278: 00000593 li a1,0 +8000127c: 00008067 ret + +80001280 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001280: 00100793 li a5,1 +80001284: 02b7d263 ble a1,a5,800012a8 + return va_arg(*ap, long long); +80001288: 00052783 lw a5,0(a0) +8000128c: 00778793 addi a5,a5,7 +80001290: ff87f793 andi a5,a5,-8 +80001294: 00878713 addi a4,a5,8 +80001298: 00e52023 sw a4,0(a0) +8000129c: 0007a503 lw a0,0(a5) +800012a0: 0047a583 lw a1,4(a5) +800012a4: 00008067 ret + else if (lflag) +800012a8: 00059e63 bnez a1,800012c4 + return va_arg(*ap, long); + else + return va_arg(*ap, int); +800012ac: 00052783 lw a5,0(a0) +800012b0: 00478713 addi a4,a5,4 +800012b4: 00e52023 sw a4,0(a0) +800012b8: 0007a503 lw a0,0(a5) +800012bc: 41f55593 srai a1,a0,0x1f +} +800012c0: 00008067 ret + return va_arg(*ap, long); +800012c4: 00052783 lw a5,0(a0) +800012c8: 00478713 addi a4,a5,4 +800012cc: 00e52023 sw a4,0(a0) +800012d0: 0007a503 lw a0,0(a5) +800012d4: 41f55593 srai a1,a0,0x1f +800012d8: 00008067 ret + +800012dc : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800012dc: 0005a783 lw a5,0(a1) +800012e0: 00a78023 sb a0,0(a5) + (*pstr)++; +800012e4: 0005a783 lw a5,0(a1) +800012e8: 00178793 addi a5,a5,1 +800012ec: 00f5a023 sw a5,0(a1) + } +800012f0: 00008067 ret + +800012f4 : +{ +800012f4: f8010113 addi sp,sp,-128 +800012f8: 00060e93 mv t4,a2 +800012fc: 00070393 mv t2,a4 +80001300: 00080893 mv a7,a6 +80001304: 00078813 mv a6,a5 +80001308: 03f10613 addi a2,sp,63 +8000130c: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +80001310: 00000793 li a5,0 +80001314: 00a62023 sw a0,0(a2) +80001318: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +8000131c: 00b62423 sw a1,8(a2) +80001320: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +80001324: 00d62823 sw a3,16(a2) +80001328: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +8000132c: 01062c23 sw a6,24(a2) +80001330: 01162e23 sw a7,28(a2) + __sync_synchronize(); +80001334: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80001338: 00000793 li a5,0 +8000133c: 00000697 auipc a3,0x0 +80001340: cc468693 addi a3,a3,-828 # 80001000 +80001344: 00c6a023 sw a2,0(a3) +80001348: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +8000134c: 00000797 auipc a5,0x0 +80001350: cf478793 addi a5,a5,-780 # 80001040 +80001354: 0007a703 lw a4,0(a5) +80001358: 0047a783 lw a5,4(a5) +8000135c: 00f76733 or a4,a4,a5 +80001360: fe0706e3 beqz a4,8000134c + fromhost = 0; +80001364: 00000797 auipc a5,0x0 +80001368: cdc78793 addi a5,a5,-804 # 80001040 +8000136c: 00000693 li a3,0 +80001370: 00000713 li a4,0 +80001374: 00d7a023 sw a3,0(a5) +80001378: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +8000137c: 0ff0000f fence + return magic_mem[0]; +80001380: 00062503 lw a0,0(a2) +80001384: 00462583 lw a1,4(a2) +} +80001388: 08010113 addi sp,sp,128 +8000138c: 00008067 ret + +80001390 : + buf[buflen++] = ch; +80001390: 00022703 lw a4,0(tp) # 0 +80001394: 00170813 addi a6,a4,1 +80001398: 01022023 sw a6,0(tp) # 0 +8000139c: 04020793 addi a5,tp,64 # 40 +800013a0: 00f707b3 add a5,a4,a5 +800013a4: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +800013a8: 00a00793 li a5,10 +800013ac: 00f50a63 beq a0,a5,800013c0 +800013b0: 00400793 li a5,4 +800013b4: 00f80663 beq a6,a5,800013c0 +} +800013b8: 00000513 li a0,0 +800013bc: 00008067 ret +{ +800013c0: ff010113 addi sp,sp,-16 +800013c4: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800013c8: 00080793 mv a5,a6 +800013cc: 41f85813 srai a6,a6,0x1f +800013d0: 04020693 addi a3,tp,64 # 40 +800013d4: 00000713 li a4,0 +800013d8: 00100593 li a1,1 +800013dc: 00000613 li a2,0 +800013e0: 04000513 li a0,64 +800013e4: f11ff0ef jal ra,800012f4 + buflen = 0; +800013e8: 00022023 sw zero,0(tp) # 0 +} +800013ec: 00000513 li a0,0 +800013f0: 00c12083 lw ra,12(sp) +800013f4: 01010113 addi sp,sp,16 +800013f8: 00008067 ret + +800013fc : + READ_CTR(mcycle); +800013fc: b00027f3 csrr a5,mcycle +80001400: 02051263 bnez a0,80001424 +80001404: 00002717 auipc a4,0x2 +80001408: 08470713 addi a4,a4,132 # 80003488 +8000140c: 00072703 lw a4,0(a4) +80001410: 40e787b3 sub a5,a5,a4 +80001414: 00001717 auipc a4,0x1 +80001418: 36c70713 addi a4,a4,876 # 80002780 <__clz_tab+0x100> +8000141c: 00002697 auipc a3,0x2 +80001420: 06e6a223 sw a4,100(a3) # 80003480 +80001424: 00002717 auipc a4,0x2 +80001428: 06f72223 sw a5,100(a4) # 80003488 + READ_CTR(minstret); +8000142c: b02027f3 csrr a5,minstret +80001430: 02051263 bnez a0,80001454 +80001434: 00002717 auipc a4,0x2 +80001438: 05470713 addi a4,a4,84 # 80003488 +8000143c: 00472703 lw a4,4(a4) +80001440: 40e787b3 sub a5,a5,a4 +80001444: 00001717 auipc a4,0x1 +80001448: 34470713 addi a4,a4,836 # 80002788 <__clz_tab+0x108> +8000144c: 00002697 auipc a3,0x2 +80001450: 02e6ac23 sw a4,56(a3) # 80003484 +80001454: 00002717 auipc a4,0x2 +80001458: 02f72c23 sw a5,56(a4) # 8000348c +} +8000145c: 00008067 ret + +80001460 : + tohost = (code << 1) | 1; +80001460: 00151513 slli a0,a0,0x1 +80001464: 00156713 ori a4,a0,1 +80001468: 00000793 li a5,0 +8000146c: 00000697 auipc a3,0x0 +80001470: b9468693 addi a3,a3,-1132 # 80001000 +80001474: 00e6a023 sw a4,0(a3) +80001478: 00f6a223 sw a5,4(a3) +8000147c: 0000006f j 8000147c + +80001480 : +{ +80001480: ff010113 addi sp,sp,-16 +80001484: 00112623 sw ra,12(sp) + tohost_exit(1337); +80001488: 53900513 li a0,1337 +8000148c: fd5ff0ef jal ra,80001460 + +80001490 : +{ +80001490: ff010113 addi sp,sp,-16 +80001494: 00112623 sw ra,12(sp) + tohost_exit(code); +80001498: fc9ff0ef jal ra,80001460 + +8000149c : +{ +8000149c: ff010113 addi sp,sp,-16 +800014a0: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +800014a4: 08600513 li a0,134 +800014a8: fe9ff0ef jal ra,80001490 + +800014ac : + while (cid != 0); +800014ac: 00051063 bnez a0,800014ac +} +800014b0: 00008067 ret + +800014b4 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +800014b4: 00b567b3 or a5,a0,a1 +800014b8: 00c7e7b3 or a5,a5,a2 +800014bc: 0037f793 andi a5,a5,3 +800014c0: 02078463 beqz a5,800014e8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +800014c4: 00050793 mv a5,a0 +800014c8: 0380006f j 80001500 + *d++ = *s++; +800014cc: 0005a703 lw a4,0(a1) +800014d0: 00e7a023 sw a4,0(a5) +800014d4: 00478793 addi a5,a5,4 +800014d8: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +800014dc: 00c50733 add a4,a0,a2 +800014e0: fee7e6e3 bltu a5,a4,800014cc +800014e4: 00008067 ret + uintptr_t *d = dest; +800014e8: 00050793 mv a5,a0 +800014ec: ff1ff06f j 800014dc + while (d < (char*)(dest + len)) + *d++ = *s++; +800014f0: 0005c703 lbu a4,0(a1) +800014f4: 00e78023 sb a4,0(a5) +800014f8: 00178793 addi a5,a5,1 +800014fc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +80001500: 00c50733 add a4,a0,a2 +80001504: fee7e6e3 bltu a5,a4,800014f0 + } + return dest; +} +80001508: 00008067 ret + +8000150c : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +8000150c: 00c567b3 or a5,a0,a2 +80001510: 0037f793 andi a5,a5,3 +80001514: 04079463 bnez a5,8000155c + uintptr_t word = byte & 0xFF; +80001518: 0ff5f593 andi a1,a1,255 + word |= word << 8; +8000151c: 00859793 slli a5,a1,0x8 +80001520: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +80001524: 01079593 slli a1,a5,0x10 +80001528: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +8000152c: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +80001530: 00c0006f j 8000153c + *d++ = word; +80001534: 00b7a023 sw a1,0(a5) +80001538: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +8000153c: 00c50733 add a4,a0,a2 +80001540: fee7eae3 bltu a5,a4,80001534 +80001544: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80001548: 00b78023 sb a1,0(a5) +8000154c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80001550: 00c50733 add a4,a0,a2 +80001554: fee7eae3 bltu a5,a4,80001548 + } + return dest; +} +80001558: 00008067 ret + char *d = dest; +8000155c: 00050793 mv a5,a0 +80001560: ff1ff06f j 80001550 + +80001564 : +{ +80001564: ff010113 addi sp,sp,-16 +80001568: 00112623 sw ra,12(sp) +8000156c: 00812423 sw s0,8(sp) +80001570: 00912223 sw s1,4(sp) +80001574: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80001578: 00002497 auipc s1,0x2 +8000157c: f1848493 addi s1,s1,-232 # 80003490 <_tdata_begin> +80001580: 00002597 auipc a1,0x2 +80001584: f1058593 addi a1,a1,-240 # 80003490 <_tdata_begin> +80001588: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +8000158c: 00020913 mv s2,tp +80001590: 00040613 mv a2,s0 +80001594: 00020513 mv a0,tp +80001598: f1dff0ef jal ra,800014b4 + memset(thread_pointer + tdata_size, 0, tbss_size); +8000159c: 88818613 addi a2,gp,-1912 # 80003504 <_tbss_end> +800015a0: 40960633 sub a2,a2,s1 +800015a4: 00000593 li a1,0 +800015a8: 00890533 add a0,s2,s0 +800015ac: f61ff0ef jal ra,8000150c +} +800015b0: 00c12083 lw ra,12(sp) +800015b4: 00812403 lw s0,8(sp) +800015b8: 00412483 lw s1,4(sp) +800015bc: 00012903 lw s2,0(sp) +800015c0: 01010113 addi sp,sp,16 +800015c4: 00008067 ret + +800015c8 : + +size_t strlen(const char *s) +{ + const char *p = s; +800015c8: 00050793 mv a5,a0 + while (*p) +800015cc: 0080006f j 800015d4 + p++; +800015d0: 00178793 addi a5,a5,1 + while (*p) +800015d4: 0007c703 lbu a4,0(a5) +800015d8: fe071ce3 bnez a4,800015d0 + return p - s; +} +800015dc: 40a78533 sub a0,a5,a0 +800015e0: 00008067 ret + +800015e4 : +{ +800015e4: ff010113 addi sp,sp,-16 +800015e8: 00112623 sw ra,12(sp) +800015ec: 00812423 sw s0,8(sp) +800015f0: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800015f4: fd5ff0ef jal ra,800015c8 +800015f8: 00050793 mv a5,a0 +800015fc: 00000813 li a6,0 +80001600: 00040693 mv a3,s0 +80001604: 00000713 li a4,0 +80001608: 00100593 li a1,1 +8000160c: 00000613 li a2,0 +80001610: 04000513 li a0,64 +80001614: ce1ff0ef jal ra,800012f4 +} +80001618: 00c12083 lw ra,12(sp) +8000161c: 00812403 lw s0,8(sp) +80001620: 01010113 addi sp,sp,16 +80001624: 00008067 ret +{ +80001628: ff010113 addi sp,sp,-16 +8000162c: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +80001630: 00001517 auipc a0,0x1 +80001634: 16450513 addi a0,a0,356 # 80002794 <__clz_tab+0x114> +80001638: fadff0ef jal ra,800015e4 +} +8000163c: fff00513 li a0,-1 +80001640: 00c12083 lw ra,12(sp) +80001644: 01010113 addi sp,sp,16 +80001648: 00008067 ret + +8000164c : +{ +8000164c: fd010113 addi sp,sp,-48 +80001650: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +80001654: 00000713 li a4,0 +80001658: 0340006f j 8000168c + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000165c: 05700613 li a2,87 +80001660: 00f00793 li a5,15 +80001664: 40e787b3 sub a5,a5,a4 +80001668: 00c686b3 add a3,a3,a2 +8000166c: 02010613 addi a2,sp,32 +80001670: 00f607b3 add a5,a2,a5 +80001674: fed78623 sb a3,-20(a5) + x >>= 4; +80001678: 01c59793 slli a5,a1,0x1c +8000167c: 00455513 srli a0,a0,0x4 +80001680: 00a7e533 or a0,a5,a0 +80001684: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80001688: 00170713 addi a4,a4,1 +8000168c: 00f00793 li a5,15 +80001690: 00e7cc63 blt a5,a4,800016a8 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80001694: 00f57693 andi a3,a0,15 +80001698: 00900613 li a2,9 +8000169c: fcd660e3 bltu a2,a3,8000165c +800016a0: 03000613 li a2,48 +800016a4: fbdff06f j 80001660 + str[16] = 0; +800016a8: 00010e23 sb zero,28(sp) + printstr(str); +800016ac: 00c10513 addi a0,sp,12 +800016b0: f35ff0ef jal ra,800015e4 +} +800016b4: 02c12083 lw ra,44(sp) +800016b8: 03010113 addi sp,sp,48 +800016bc: 00008067 ret + +800016c0 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +800016c0: 00050793 mv a5,a0 + while (n-- && *p) +800016c4: 00c0006f j 800016d0 + p++; +800016c8: 00178793 addi a5,a5,1 + while (n-- && *p) +800016cc: 00070593 mv a1,a4 +800016d0: fff58713 addi a4,a1,-1 +800016d4: 00058663 beqz a1,800016e0 +800016d8: 0007c683 lbu a3,0(a5) +800016dc: fe0696e3 bnez a3,800016c8 + return p - s; +} +800016e0: 40a78533 sub a0,a5,a0 +800016e4: 00008067 ret + +800016e8 : +{ +800016e8: ec010113 addi sp,sp,-320 +800016ec: 12112e23 sw ra,316(sp) +800016f0: 12812c23 sw s0,312(sp) +800016f4: 12912a23 sw s1,308(sp) +800016f8: 13212823 sw s2,304(sp) +800016fc: 13312623 sw s3,300(sp) +80001700: 13412423 sw s4,296(sp) +80001704: 13512223 sw s5,292(sp) +80001708: 13612023 sw s6,288(sp) +8000170c: 11712e23 sw s7,284(sp) +80001710: 11812c23 sw s8,280(sp) +80001714: 11912a23 sw s9,276(sp) +80001718: 11a12823 sw s10,272(sp) +8000171c: 00050993 mv s3,a0 +80001720: 00058913 mv s2,a1 +80001724: 00060413 mv s0,a2 +80001728: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +8000172c: 00044503 lbu a0,0(s0) +80001730: 02500793 li a5,37 +80001734: 00f50c63 beq a0,a5,8000174c + if (ch == '\0') +80001738: 30050c63 beqz a0,80001a50 + fmt++; +8000173c: 00140413 addi s0,s0,1 + putch(ch, putdat); +80001740: 00090593 mv a1,s2 +80001744: 000980e7 jalr s3 +80001748: fe5ff06f j 8000172c + fmt++; +8000174c: 00140a13 addi s4,s0,1 +80001750: 000a0793 mv a5,s4 + padc = ' '; +80001754: 02000c93 li s9,32 + precision = -1; +80001758: fff00493 li s1,-1 + width = -1; +8000175c: fff00b93 li s7,-1 + lflag = 0; +80001760: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +80001764: 00178413 addi s0,a5,1 +80001768: 0007c503 lbu a0,0(a5) +8000176c: fdd50793 addi a5,a0,-35 +80001770: 0ff7f693 andi a3,a5,255 +80001774: 05500713 li a4,85 +80001778: 2cd76263 bltu a4,a3,80001a3c +8000177c: 00269793 slli a5,a3,0x2 +80001780: 00001717 auipc a4,0x1 +80001784: da870713 addi a4,a4,-600 # 80002528 <__umoddi3+0x410> +80001788: 00e787b3 add a5,a5,a4 +8000178c: 0007a783 lw a5,0(a5) +80001790: 00e787b3 add a5,a5,a4 +80001794: 00078067 jr a5 +80001798: 00040793 mv a5,s0 + padc = '-'; +8000179c: 02d00c93 li s9,45 +800017a0: fc5ff06f j 80001764 + switch (ch = *(unsigned char *) fmt++) { +800017a4: 00040793 mv a5,s0 + padc = '0'; +800017a8: 03000c93 li s9,48 +800017ac: fb9ff06f j 80001764 + switch (ch = *(unsigned char *) fmt++) { +800017b0: 00040793 mv a5,s0 + width = 0; +800017b4: 00000b93 li s7,0 +800017b8: fadff06f j 80001764 + base = 10; +800017bc: 00a00c13 li s8,10 +800017c0: 1a40006f j 80001964 + for (precision = 0; ; ++fmt) { +800017c4: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +800017c8: 00249793 slli a5,s1,0x2 +800017cc: 009784b3 add s1,a5,s1 +800017d0: 00149793 slli a5,s1,0x1 +800017d4: 00a78533 add a0,a5,a0 +800017d8: fd050493 addi s1,a0,-48 + ch = *fmt; +800017dc: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +800017e0: fd050713 addi a4,a0,-48 +800017e4: 00900793 li a5,9 +800017e8: 04e7e263 bltu a5,a4,8000182c + for (precision = 0; ; ++fmt) { +800017ec: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800017f0: fd9ff06f j 800017c8 + precision = va_arg(ap, int); +800017f4: 00c12783 lw a5,12(sp) +800017f8: 00478713 addi a4,a5,4 +800017fc: 00e12623 sw a4,12(sp) +80001800: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +80001804: 00040793 mv a5,s0 + if (width < 0) +80001808: f40bdee3 bgez s7,80001764 + width = precision, precision = -1; +8000180c: 00048b93 mv s7,s1 +80001810: fff00493 li s1,-1 +80001814: f51ff06f j 80001764 + if (width < 0) +80001818: f80bcce3 bltz s7,800017b0 + switch (ch = *(unsigned char *) fmt++) { +8000181c: 00040793 mv a5,s0 +80001820: f45ff06f j 80001764 +80001824: 00040793 mv a5,s0 + goto reswitch; +80001828: f3dff06f j 80001764 +8000182c: 00040793 mv a5,s0 +80001830: fd9ff06f j 80001808 + lflag++; +80001834: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +80001838: 00040793 mv a5,s0 + goto reswitch; +8000183c: f29ff06f j 80001764 + putch(va_arg(ap, int), putdat); +80001840: 00c12783 lw a5,12(sp) +80001844: 00478713 addi a4,a5,4 +80001848: 00e12623 sw a4,12(sp) +8000184c: 00090593 mv a1,s2 +80001850: 0007a503 lw a0,0(a5) +80001854: 000980e7 jalr s3 + break; +80001858: ed5ff06f j 8000172c + if ((p = va_arg(ap, char *)) == NULL) +8000185c: 00c12783 lw a5,12(sp) +80001860: 00478713 addi a4,a5,4 +80001864: 00e12623 sw a4,12(sp) +80001868: 0007aa03 lw s4,0(a5) +8000186c: 020a0263 beqz s4,80001890 + if (width > 0 && padc != '-') +80001870: 05705a63 blez s7,800018c4 +80001874: 02d00793 li a5,45 +80001878: 04fc8663 beq s9,a5,800018c4 + for (width -= strnlen(p, precision); width > 0; width--) +8000187c: 00048593 mv a1,s1 +80001880: 000a0513 mv a0,s4 +80001884: e3dff0ef jal ra,800016c0 +80001888: 40ab8bb3 sub s7,s7,a0 +8000188c: 0200006f j 800018ac + p = "(null)"; +80001890: 00001a17 auipc s4,0x1 +80001894: f1ca0a13 addi s4,s4,-228 # 800027ac <__clz_tab+0x12c> +80001898: fd9ff06f j 80001870 + putch(padc, putdat); +8000189c: 00090593 mv a1,s2 +800018a0: 000c8513 mv a0,s9 +800018a4: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +800018a8: fffb8b93 addi s7,s7,-1 +800018ac: ff7048e3 bgtz s7,8000189c +800018b0: 0140006f j 800018c4 + putch(ch, putdat); +800018b4: 00090593 mv a1,s2 +800018b8: 000980e7 jalr s3 + p++; +800018bc: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +800018c0: fffb8b93 addi s7,s7,-1 +800018c4: 000a4503 lbu a0,0(s4) +800018c8: 00050863 beqz a0,800018d8 +800018cc: fe04c4e3 bltz s1,800018b4 +800018d0: fff48493 addi s1,s1,-1 +800018d4: fe04d0e3 bgez s1,800018b4 + for (; width > 0; width--) +800018d8: e5705ae3 blez s7,8000172c + putch(' ', putdat); +800018dc: 00090593 mv a1,s2 +800018e0: 02000513 li a0,32 +800018e4: 000980e7 jalr s3 + for (; width > 0; width--) +800018e8: fffb8b93 addi s7,s7,-1 +800018ec: fedff06f j 800018d8 + num = getint(&ap, lflag); +800018f0: 00c10513 addi a0,sp,12 +800018f4: 98dff0ef jal ra,80001280 +800018f8: 00050493 mv s1,a0 +800018fc: 00058a13 mv s4,a1 +80001900: 00050b13 mv s6,a0 +80001904: 00058a93 mv s5,a1 + if ((long long) num < 0) { +80001908: 0c05d063 bgez a1,800019c8 + putch('-', putdat); +8000190c: 00090593 mv a1,s2 +80001910: 02d00513 li a0,45 +80001914: 000980e7 jalr s3 + num = -(long long) num; +80001918: 00000793 li a5,0 +8000191c: 40978b33 sub s6,a5,s1 +80001920: 01603ab3 snez s5,s6 +80001924: 414787b3 sub a5,a5,s4 +80001928: 41578ab3 sub s5,a5,s5 + base = 10; +8000192c: 00a00c13 li s8,10 +80001930: 0440006f j 80001974 + base = 8; +80001934: 00800c13 li s8,8 + goto unsigned_number; +80001938: 02c0006f j 80001964 + putch('0', putdat); +8000193c: 00090593 mv a1,s2 +80001940: 03000513 li a0,48 +80001944: 000980e7 jalr s3 + putch('x', putdat); +80001948: 00090593 mv a1,s2 +8000194c: 07800513 li a0,120 +80001950: 000980e7 jalr s3 + lflag = 1; +80001954: 00100593 li a1,1 + base = 16; +80001958: 01000c13 li s8,16 +8000195c: 0080006f j 80001964 +80001960: 01000c13 li s8,16 + num = getuint(&ap, lflag); +80001964: 00c10513 addi a0,sp,12 +80001968: 8bdff0ef jal ra,80001224 +8000196c: 00050b13 mv s6,a0 +80001970: 00058a93 mv s5,a1 + int pos = 0; +80001974: 00000493 li s1,0 + digs[pos++] = num % base; +80001978: 000c0613 mv a2,s8 +8000197c: 00000693 li a3,0 +80001980: 000b0513 mv a0,s6 +80001984: 000a8593 mv a1,s5 +80001988: 790000ef jal ra,80002118 <__umoddi3> +8000198c: 00148a13 addi s4,s1,1 +80001990: 00249493 slli s1,s1,0x2 +80001994: 11010793 addi a5,sp,272 +80001998: 009784b3 add s1,a5,s1 +8000199c: f0a4a023 sw a0,-256(s1) + if (num < base) +800019a0: 020a8863 beqz s5,800019d0 + num /= base; +800019a4: 000c0613 mv a2,s8 +800019a8: 00000693 li a3,0 +800019ac: 000b0513 mv a0,s6 +800019b0: 000a8593 mv a1,s5 +800019b4: 330000ef jal ra,80001ce4 <__udivdi3> +800019b8: 00050b13 mv s6,a0 +800019bc: 00058a93 mv s5,a1 + digs[pos++] = num % base; +800019c0: 000a0493 mv s1,s4 +800019c4: fb5ff06f j 80001978 + base = 10; +800019c8: 00a00c13 li s8,10 +800019cc: fa9ff06f j 80001974 + if (num < base) +800019d0: fd8b7ae3 bleu s8,s6,800019a4 +800019d4: 0140006f j 800019e8 + putch(padc, putdat); +800019d8: 00090593 mv a1,s2 +800019dc: 000c8513 mv a0,s9 +800019e0: 000980e7 jalr s3 + while (width-- > pos) +800019e4: 00048b93 mv s7,s1 +800019e8: fffb8493 addi s1,s7,-1 +800019ec: ff7a46e3 blt s4,s7,800019d8 +800019f0: 0180006f j 80001a08 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800019f4: 03000513 li a0,48 +800019f8: 00090593 mv a1,s2 +800019fc: 00a78533 add a0,a5,a0 +80001a00: 000980e7 jalr s3 + while (pos-- > 0) +80001a04: 00048a13 mv s4,s1 +80001a08: fffa0493 addi s1,s4,-1 +80001a0c: d34050e3 blez s4,8000172c + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +80001a10: 00249793 slli a5,s1,0x2 +80001a14: 11010713 addi a4,sp,272 +80001a18: 00f707b3 add a5,a4,a5 +80001a1c: f007a783 lw a5,-256(a5) +80001a20: 00900713 li a4,9 +80001a24: fcf778e3 bleu a5,a4,800019f4 +80001a28: 05700513 li a0,87 +80001a2c: fcdff06f j 800019f8 + putch(ch, putdat); +80001a30: 00090593 mv a1,s2 +80001a34: 000980e7 jalr s3 + break; +80001a38: cf5ff06f j 8000172c + putch('%', putdat); +80001a3c: 00090593 mv a1,s2 +80001a40: 02500513 li a0,37 +80001a44: 000980e7 jalr s3 + fmt = last_fmt; +80001a48: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80001a4c: ce1ff06f j 8000172c +} +80001a50: 13c12083 lw ra,316(sp) +80001a54: 13812403 lw s0,312(sp) +80001a58: 13412483 lw s1,308(sp) +80001a5c: 13012903 lw s2,304(sp) +80001a60: 12c12983 lw s3,300(sp) +80001a64: 12812a03 lw s4,296(sp) +80001a68: 12412a83 lw s5,292(sp) +80001a6c: 12012b03 lw s6,288(sp) +80001a70: 11c12b83 lw s7,284(sp) +80001a74: 11812c03 lw s8,280(sp) +80001a78: 11412c83 lw s9,276(sp) +80001a7c: 11012d03 lw s10,272(sp) +80001a80: 14010113 addi sp,sp,320 +80001a84: 00008067 ret + +80001a88 : +{ +80001a88: fc010113 addi sp,sp,-64 +80001a8c: 00112e23 sw ra,28(sp) +80001a90: 02b12223 sw a1,36(sp) +80001a94: 02c12423 sw a2,40(sp) +80001a98: 02d12623 sw a3,44(sp) +80001a9c: 02e12823 sw a4,48(sp) +80001aa0: 02f12a23 sw a5,52(sp) +80001aa4: 03012c23 sw a6,56(sp) +80001aa8: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80001aac: 02410693 addi a3,sp,36 +80001ab0: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +80001ab4: 00050613 mv a2,a0 +80001ab8: 00000593 li a1,0 +80001abc: 00000517 auipc a0,0x0 +80001ac0: 8d450513 addi a0,a0,-1836 # 80001390 +80001ac4: c25ff0ef jal ra,800016e8 +} +80001ac8: 00000513 li a0,0 +80001acc: 01c12083 lw ra,28(sp) +80001ad0: 04010113 addi sp,sp,64 +80001ad4: 00008067 ret + +80001ad8 : +{ +80001ad8: fb010113 addi sp,sp,-80 +80001adc: 02112623 sw ra,44(sp) +80001ae0: 02812423 sw s0,40(sp) +80001ae4: 00a12623 sw a0,12(sp) +80001ae8: 02c12c23 sw a2,56(sp) +80001aec: 02d12e23 sw a3,60(sp) +80001af0: 04e12023 sw a4,64(sp) +80001af4: 04f12223 sw a5,68(sp) +80001af8: 05012423 sw a6,72(sp) +80001afc: 05112623 sw a7,76(sp) + char* str0 = str; +80001b00: 00050413 mv s0,a0 + va_start(ap, fmt); +80001b04: 03810693 addi a3,sp,56 +80001b08: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +80001b0c: 00058613 mv a2,a1 +80001b10: 00c10593 addi a1,sp,12 +80001b14: fffff517 auipc a0,0xfffff +80001b18: 7c850513 addi a0,a0,1992 # 800012dc +80001b1c: bcdff0ef jal ra,800016e8 + *str = 0; +80001b20: 00c12783 lw a5,12(sp) +80001b24: 00078023 sb zero,0(a5) +} +80001b28: 00c12503 lw a0,12(sp) +80001b2c: 40850533 sub a0,a0,s0 +80001b30: 02c12083 lw ra,44(sp) +80001b34: 02812403 lw s0,40(sp) +80001b38: 05010113 addi sp,sp,80 +80001b3c: 00008067 ret + +80001b40 <_init>: +{ +80001b40: f6010113 addi sp,sp,-160 +80001b44: 08112e23 sw ra,156(sp) +80001b48: 08812c23 sw s0,152(sp) +80001b4c: 08912a23 sw s1,148(sp) +80001b50: 09212823 sw s2,144(sp) +80001b54: 09312623 sw s3,140(sp) +80001b58: 00050413 mv s0,a0 +80001b5c: 00058913 mv s2,a1 +80001b60: 03f10493 addi s1,sp,63 +80001b64: fc04f493 andi s1,s1,-64 + init_tls(); +80001b68: 9fdff0ef jal ra,80001564 + thread_entry(cid, nc); +80001b6c: 00090593 mv a1,s2 +80001b70: 00040513 mv a0,s0 +80001b74: 939ff0ef jal ra,800014ac + int ret = main(0, 0); +80001b78: 00000593 li a1,0 +80001b7c: 00000513 li a0,0 +80001b80: e24ff0ef jal ra,800011a4
+80001b84: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80001b88: 00000413 li s0,0 + char* pbuf = buf; +80001b8c: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80001b90: 0080006f j 80001b98 <_init+0x58> +80001b94: 00140413 addi s0,s0,1 +80001b98: 00100793 li a5,1 +80001b9c: 0487c263 blt a5,s0,80001be0 <_init+0xa0> + if (counters[i]) +80001ba0: 00241713 slli a4,s0,0x2 +80001ba4: 00002797 auipc a5,0x2 +80001ba8: 8e478793 addi a5,a5,-1820 # 80003488 +80001bac: 00e787b3 add a5,a5,a4 +80001bb0: 0007a683 lw a3,0(a5) +80001bb4: fe0680e3 beqz a3,80001b94 <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +80001bb8: 00002797 auipc a5,0x2 +80001bbc: 8c878793 addi a5,a5,-1848 # 80003480 +80001bc0: 00e787b3 add a5,a5,a4 +80001bc4: 0007a603 lw a2,0(a5) +80001bc8: 00001597 auipc a1,0x1 +80001bcc: bec58593 addi a1,a1,-1044 # 800027b4 <__clz_tab+0x134> +80001bd0: 00090513 mv a0,s2 +80001bd4: f05ff0ef jal ra,80001ad8 +80001bd8: 00a90933 add s2,s2,a0 +80001bdc: fb9ff06f j 80001b94 <_init+0x54> + if (pbuf != buf) +80001be0: 01248663 beq s1,s2,80001bec <_init+0xac> + printstr(buf); +80001be4: 00048513 mv a0,s1 +80001be8: 9fdff0ef jal ra,800015e4 + exit(ret); +80001bec: 00098513 mv a0,s3 +80001bf0: 8a1ff0ef jal ra,80001490 + +80001bf4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +80001bf4: 00150613 addi a2,a0,1 +80001bf8: 00054783 lbu a5,0(a0) + c2 = *s2++; +80001bfc: 00158693 addi a3,a1,1 +80001c00: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +80001c04: 00078863 beqz a5,80001c14 + c1 = *s1++; +80001c08: 00060513 mv a0,a2 + c2 = *s2++; +80001c0c: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +80001c10: fee782e3 beq a5,a4,80001bf4 + + return c1 - c2; +} +80001c14: 40e78533 sub a0,a5,a4 +80001c18: 00008067 ret + +80001c1c : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +80001c1c: 00050793 mv a5,a0 + while ((*d++ = *src++)) +80001c20: 0005c703 lbu a4,0(a1) +80001c24: 00e78023 sb a4,0(a5) +80001c28: 00158593 addi a1,a1,1 +80001c2c: 00178793 addi a5,a5,1 +80001c30: fe0718e3 bnez a4,80001c20 + ; + return dest; +} +80001c34: 00008067 ret + +80001c38 : + +long atol(const char* str) +{ +80001c38: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +80001c3c: 0080006f j 80001c44 + str++; +80001c40: 00178793 addi a5,a5,1 + while (*str == ' ') +80001c44: 0007c703 lbu a4,0(a5) +80001c48: 02000693 li a3,32 +80001c4c: fed70ae3 beq a4,a3,80001c40 + + if (*str == '-' || *str == '+') { +80001c50: 02d00693 li a3,45 +80001c54: 00d70a63 beq a4,a3,80001c68 +80001c58: 02b00693 li a3,43 +80001c5c: 00d70663 beq a4,a3,80001c68 + int sign = 0; +80001c60: 00000613 li a2,0 +80001c64: 0100006f j 80001c74 + sign = *str == '-'; +80001c68: fd370713 addi a4,a4,-45 +80001c6c: 00173613 seqz a2,a4 + str++; +80001c70: 00178793 addi a5,a5,1 + int sign = 0; +80001c74: 00000513 li a0,0 +80001c78: 01c0006f j 80001c94 + } + + while (*str) { + res *= 10; +80001c7c: 00251693 slli a3,a0,0x2 +80001c80: 00a686b3 add a3,a3,a0 +80001c84: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80001c88: 00178793 addi a5,a5,1 +80001c8c: fd070713 addi a4,a4,-48 +80001c90: 00e50533 add a0,a0,a4 + while (*str) { +80001c94: 0007c703 lbu a4,0(a5) +80001c98: fe0712e3 bnez a4,80001c7c + } + + return sign ? -res : res; +80001c9c: 00060463 beqz a2,80001ca4 +80001ca0: 40a00533 neg a0,a0 +} +80001ca4: 00008067 ret + +80001ca8 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80001ca8: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80001cac: 00001717 auipc a4,0x1 +80001cb0: 7d070713 addi a4,a4,2000 # 8000347c +80001cb4: 00072703 lw a4,0(a4) +80001cb8: 00070e63 beqz a4,80001cd4 <_sbrk+0x2c> + heap_end = & _end; + + prev_heap_end = heap_end; +80001cbc: 00001717 auipc a4,0x1 +80001cc0: 7c070713 addi a4,a4,1984 # 8000347c +80001cc4: 00072503 lw a0,0(a4) + heap_end += incr; +80001cc8: 00f507b3 add a5,a0,a5 +80001ccc: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80001cd0: 00008067 ret + heap_end = & _end; +80001cd4: 84418713 addi a4,gp,-1980 # 800034c0 <_end> +80001cd8: 00001697 auipc a3,0x1 +80001cdc: 7ae6a223 sw a4,1956(a3) # 8000347c +80001ce0: fddff06f j 80001cbc <_sbrk+0x14> + +80001ce4 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80001ce4: 00058793 mv a5,a1 + d0 = dd.s.low; +80001ce8: 00060813 mv a6,a2 + d1 = dd.s.high; +80001cec: 00068893 mv a7,a3 + n0 = nn.s.low; +80001cf0: 00050313 mv t1,a0 + if (d1 == 0) +80001cf4: 28069663 bnez a3,80001f80 <__udivdi3+0x29c> +80001cf8: 80002737 lui a4,0x80002 +80001cfc: 68070713 addi a4,a4,1664 # 80002680 + if (d0 > n1) +80001d00: 0ec5f663 bleu a2,a1,80001dec <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80001d04: 000106b7 lui a3,0x10 +80001d08: 0cd67863 bleu a3,a2,80001dd8 <__udivdi3+0xf4> +80001d0c: 0ff00693 li a3,255 +80001d10: 00c6b6b3 sltu a3,a3,a2 +80001d14: 00369693 slli a3,a3,0x3 +80001d18: 00d658b3 srl a7,a2,a3 +80001d1c: 01170733 add a4,a4,a7 +80001d20: 00074703 lbu a4,0(a4) +80001d24: 00d706b3 add a3,a4,a3 +80001d28: 02000713 li a4,32 +80001d2c: 40d70733 sub a4,a4,a3 + if (bm != 0) +80001d30: 00070c63 beqz a4,80001d48 <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001d34: 00e797b3 sll a5,a5,a4 +80001d38: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80001d3c: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001d40: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80001d44: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001d48: 01085513 srli a0,a6,0x10 +80001d4c: 02a5d7b3 divu a5,a1,a0 +80001d50: 01081613 slli a2,a6,0x10 +80001d54: 01065613 srli a2,a2,0x10 +80001d58: 01035693 srli a3,t1,0x10 +80001d5c: 02a5f733 remu a4,a1,a0 +80001d60: 02f605b3 mul a1,a2,a5 +80001d64: 01071713 slli a4,a4,0x10 +80001d68: 00d766b3 or a3,a4,a3 +80001d6c: 00078713 mv a4,a5 +80001d70: 00b6fe63 bleu a1,a3,80001d8c <__udivdi3+0xa8> +80001d74: 010686b3 add a3,a3,a6 +80001d78: fff78713 addi a4,a5,-1 +80001d7c: 0106e863 bltu a3,a6,80001d8c <__udivdi3+0xa8> +80001d80: 00b6f663 bleu a1,a3,80001d8c <__udivdi3+0xa8> +80001d84: ffe78713 addi a4,a5,-2 +80001d88: 010686b3 add a3,a3,a6 +80001d8c: 40b686b3 sub a3,a3,a1 +80001d90: 02a6f7b3 remu a5,a3,a0 +80001d94: 01031313 slli t1,t1,0x10 +80001d98: 01035313 srli t1,t1,0x10 +80001d9c: 02a6d6b3 divu a3,a3,a0 +80001da0: 01079793 slli a5,a5,0x10 +80001da4: 0067e333 or t1,a5,t1 +80001da8: 02d605b3 mul a1,a2,a3 +80001dac: 00068513 mv a0,a3 +80001db0: 00b37c63 bleu a1,t1,80001dc8 <__udivdi3+0xe4> +80001db4: 00680333 add t1,a6,t1 +80001db8: fff68513 addi a0,a3,-1 # ffff +80001dbc: 01036663 bltu t1,a6,80001dc8 <__udivdi3+0xe4> +80001dc0: 00b37463 bleu a1,t1,80001dc8 <__udivdi3+0xe4> +80001dc4: ffe68513 addi a0,a3,-2 +80001dc8: 01071713 slli a4,a4,0x10 +80001dcc: 00a76733 or a4,a4,a0 + q1 = 0; +80001dd0: 00000593 li a1,0 +80001dd4: 0e40006f j 80001eb8 <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80001dd8: 010008b7 lui a7,0x1000 +80001ddc: 01000693 li a3,16 +80001de0: f3166ce3 bltu a2,a7,80001d18 <__udivdi3+0x34> +80001de4: 01800693 li a3,24 +80001de8: f31ff06f j 80001d18 <__udivdi3+0x34> + if (d0 == 0) +80001dec: 00061663 bnez a2,80001df8 <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80001df0: 00100693 li a3,1 +80001df4: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +80001df8: 000106b7 lui a3,0x10 +80001dfc: 0cd87263 bleu a3,a6,80001ec0 <__udivdi3+0x1dc> +80001e00: 0ff00693 li a3,255 +80001e04: 0106f463 bleu a6,a3,80001e0c <__udivdi3+0x128> +80001e08: 00800893 li a7,8 +80001e0c: 011856b3 srl a3,a6,a7 +80001e10: 00d70733 add a4,a4,a3 +80001e14: 00074683 lbu a3,0(a4) +80001e18: 02000713 li a4,32 +80001e1c: 011686b3 add a3,a3,a7 +80001e20: 40d70733 sub a4,a4,a3 + if (bm == 0) +80001e24: 0a071863 bnez a4,80001ed4 <__udivdi3+0x1f0> + n1 -= d0; +80001e28: 410787b3 sub a5,a5,a6 + q1 = 1; +80001e2c: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001e30: 01085613 srli a2,a6,0x10 +80001e34: 01081893 slli a7,a6,0x10 +80001e38: 0108d893 srli a7,a7,0x10 +80001e3c: 01035693 srli a3,t1,0x10 +80001e40: 02c7f733 remu a4,a5,a2 +80001e44: 02c7d7b3 divu a5,a5,a2 +80001e48: 01071713 slli a4,a4,0x10 +80001e4c: 00d766b3 or a3,a4,a3 +80001e50: 02f88533 mul a0,a7,a5 +80001e54: 00078713 mv a4,a5 +80001e58: 00a6fe63 bleu a0,a3,80001e74 <__udivdi3+0x190> +80001e5c: 010686b3 add a3,a3,a6 +80001e60: fff78713 addi a4,a5,-1 +80001e64: 0106e863 bltu a3,a6,80001e74 <__udivdi3+0x190> +80001e68: 00a6f663 bleu a0,a3,80001e74 <__udivdi3+0x190> +80001e6c: ffe78713 addi a4,a5,-2 +80001e70: 010686b3 add a3,a3,a6 +80001e74: 40a686b3 sub a3,a3,a0 +80001e78: 02c6f7b3 remu a5,a3,a2 +80001e7c: 01031313 slli t1,t1,0x10 +80001e80: 01035313 srli t1,t1,0x10 +80001e84: 02c6d6b3 divu a3,a3,a2 +80001e88: 01079793 slli a5,a5,0x10 +80001e8c: 0067e333 or t1,a5,t1 +80001e90: 02d888b3 mul a7,a7,a3 +80001e94: 00068513 mv a0,a3 +80001e98: 01137c63 bleu a7,t1,80001eb0 <__udivdi3+0x1cc> +80001e9c: 00680333 add t1,a6,t1 +80001ea0: fff68513 addi a0,a3,-1 # ffff +80001ea4: 01036663 bltu t1,a6,80001eb0 <__udivdi3+0x1cc> +80001ea8: 01137463 bleu a7,t1,80001eb0 <__udivdi3+0x1cc> +80001eac: ffe68513 addi a0,a3,-2 +80001eb0: 01071713 slli a4,a4,0x10 +80001eb4: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +80001eb8: 00070513 mv a0,a4 +80001ebc: 00008067 ret + count_leading_zeros (bm, d0); +80001ec0: 010006b7 lui a3,0x1000 +80001ec4: 01000893 li a7,16 +80001ec8: f4d862e3 bltu a6,a3,80001e0c <__udivdi3+0x128> +80001ecc: 01800893 li a7,24 +80001ed0: f3dff06f j 80001e0c <__udivdi3+0x128> + d0 = d0 << bm; +80001ed4: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +80001ed8: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80001edc: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80001ee0: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001ee4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80001ee8: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001eec: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80001ef0: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001ef4: 01081793 slli a5,a6,0x10 +80001ef8: 0107d793 srli a5,a5,0x10 +80001efc: 0108d613 srli a2,a7,0x10 +80001f00: 02a5d5b3 divu a1,a1,a0 +80001f04: 01071713 slli a4,a4,0x10 +80001f08: 00c76733 or a4,a4,a2 +80001f0c: 02b786b3 mul a3,a5,a1 +80001f10: 00058613 mv a2,a1 +80001f14: 00d77e63 bleu a3,a4,80001f30 <__udivdi3+0x24c> +80001f18: 01070733 add a4,a4,a6 +80001f1c: fff58613 addi a2,a1,-1 +80001f20: 01076863 bltu a4,a6,80001f30 <__udivdi3+0x24c> +80001f24: 00d77663 bleu a3,a4,80001f30 <__udivdi3+0x24c> +80001f28: ffe58613 addi a2,a1,-2 +80001f2c: 01070733 add a4,a4,a6 +80001f30: 40d706b3 sub a3,a4,a3 +80001f34: 02a6f733 remu a4,a3,a0 +80001f38: 01089893 slli a7,a7,0x10 +80001f3c: 0108d893 srli a7,a7,0x10 +80001f40: 02a6d6b3 divu a3,a3,a0 +80001f44: 01071713 slli a4,a4,0x10 +80001f48: 02d785b3 mul a1,a5,a3 +80001f4c: 011767b3 or a5,a4,a7 +80001f50: 00068713 mv a4,a3 +80001f54: 00b7fe63 bleu a1,a5,80001f70 <__udivdi3+0x28c> +80001f58: 010787b3 add a5,a5,a6 +80001f5c: fff68713 addi a4,a3,-1 # ffffff +80001f60: 0107e863 bltu a5,a6,80001f70 <__udivdi3+0x28c> +80001f64: 00b7f663 bleu a1,a5,80001f70 <__udivdi3+0x28c> +80001f68: ffe68713 addi a4,a3,-2 +80001f6c: 010787b3 add a5,a5,a6 +80001f70: 40b787b3 sub a5,a5,a1 +80001f74: 01061593 slli a1,a2,0x10 +80001f78: 00e5e5b3 or a1,a1,a4 +80001f7c: eb5ff06f j 80001e30 <__udivdi3+0x14c> + if (d1 > n1) +80001f80: 18d5e663 bltu a1,a3,8000210c <__udivdi3+0x428> + count_leading_zeros (bm, d1); +80001f84: 00010737 lui a4,0x10 +80001f88: 04e6f463 bleu a4,a3,80001fd0 <__udivdi3+0x2ec> +80001f8c: 0ff00813 li a6,255 +80001f90: 00d83733 sltu a4,a6,a3 +80001f94: 00371713 slli a4,a4,0x3 +80001f98: 80002837 lui a6,0x80002 +80001f9c: 68080813 addi a6,a6,1664 # 80002680 +80001fa0: 00e6d5b3 srl a1,a3,a4 +80001fa4: 010585b3 add a1,a1,a6 +80001fa8: 0005c803 lbu a6,0(a1) +80001fac: 02000593 li a1,32 +80001fb0: 00e80833 add a6,a6,a4 +80001fb4: 410585b3 sub a1,a1,a6 + if (bm == 0) +80001fb8: 02059663 bnez a1,80001fe4 <__udivdi3+0x300> + q0 = 1; +80001fbc: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +80001fc0: eef6ece3 bltu a3,a5,80001eb8 <__udivdi3+0x1d4> +80001fc4: 00c53533 sltu a0,a0,a2 +80001fc8: 00154713 xori a4,a0,1 +80001fcc: eedff06f j 80001eb8 <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +80001fd0: 010005b7 lui a1,0x1000 +80001fd4: 01000713 li a4,16 +80001fd8: fcb6e0e3 bltu a3,a1,80001f98 <__udivdi3+0x2b4> +80001fdc: 01800713 li a4,24 +80001fe0: fb9ff06f j 80001f98 <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80001fe4: 01065733 srl a4,a2,a6 +80001fe8: 00b696b3 sll a3,a3,a1 +80001fec: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001ff0: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80001ff4: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001ff8: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80001ffc: 00b797b3 sll a5,a5,a1 +80002000: 01055833 srl a6,a0,a6 +80002004: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002008: 01069793 slli a5,a3,0x10 +8000200c: 0107d793 srli a5,a5,0x10 +80002010: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80002014: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002018: 03d75733 divu a4,a4,t4 +8000201c: 01089893 slli a7,a7,0x10 +80002020: 0108e833 or a6,a7,a6 +80002024: 02e78f33 mul t5,a5,a4 +80002028: 00070e13 mv t3,a4 +8000202c: 01e87e63 bleu t5,a6,80002048 <__udivdi3+0x364> +80002030: 00d80833 add a6,a6,a3 +80002034: fff70e13 addi t3,a4,-1 # ffff +80002038: 00d86863 bltu a6,a3,80002048 <__udivdi3+0x364> +8000203c: 01e87663 bleu t5,a6,80002048 <__udivdi3+0x364> +80002040: ffe70e13 addi t3,a4,-2 +80002044: 00d80833 add a6,a6,a3 +80002048: 41e80833 sub a6,a6,t5 +8000204c: 03d878b3 remu a7,a6,t4 +80002050: 03d85833 divu a6,a6,t4 +80002054: 01089893 slli a7,a7,0x10 +80002058: 03078eb3 mul t4,a5,a6 +8000205c: 01031793 slli a5,t1,0x10 +80002060: 0107d793 srli a5,a5,0x10 +80002064: 00f8e7b3 or a5,a7,a5 +80002068: 00080713 mv a4,a6 +8000206c: 01d7fe63 bleu t4,a5,80002088 <__udivdi3+0x3a4> +80002070: 00d787b3 add a5,a5,a3 +80002074: fff80713 addi a4,a6,-1 +80002078: 00d7e863 bltu a5,a3,80002088 <__udivdi3+0x3a4> +8000207c: 01d7f663 bleu t4,a5,80002088 <__udivdi3+0x3a4> +80002080: ffe80713 addi a4,a6,-2 +80002084: 00d787b3 add a5,a5,a3 +80002088: 010e1e13 slli t3,t3,0x10 +8000208c: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +80002090: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002094: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +80002098: fffe8813 addi a6,t4,-1 # ffff +8000209c: 01077333 and t1,a4,a6 +800020a0: 01075893 srli a7,a4,0x10 +800020a4: 01067833 and a6,a2,a6 +800020a8: 01065613 srli a2,a2,0x10 +800020ac: 03030e33 mul t3,t1,a6 +800020b0: 03088833 mul a6,a7,a6 +800020b4: 010e5693 srli a3,t3,0x10 +800020b8: 02c30333 mul t1,t1,a2 +800020bc: 01030333 add t1,t1,a6 +800020c0: 006686b3 add a3,a3,t1 +800020c4: 02c888b3 mul a7,a7,a2 +800020c8: 0106f463 bleu a6,a3,800020d0 <__udivdi3+0x3ec> +800020cc: 01d888b3 add a7,a7,t4 +800020d0: 0106d613 srli a2,a3,0x10 +800020d4: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800020d8: 0317e663 bltu a5,a7,80002104 <__udivdi3+0x420> +800020dc: cf179ae3 bne a5,a7,80001dd0 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +800020e0: 000107b7 lui a5,0x10 +800020e4: fff78793 addi a5,a5,-1 # ffff +800020e8: 00f6f6b3 and a3,a3,a5 +800020ec: 01069693 slli a3,a3,0x10 +800020f0: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +800020f4: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +800020f8: 01c686b3 add a3,a3,t3 + q1 = 0; +800020fc: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80002100: dad57ce3 bleu a3,a0,80001eb8 <__udivdi3+0x1d4> + q0--; +80002104: fff70713 addi a4,a4,-1 +80002108: cc9ff06f j 80001dd0 <__udivdi3+0xec> + q1 = 0; +8000210c: 00000593 li a1,0 + q0 = 0; +80002110: 00000713 li a4,0 +80002114: da5ff06f j 80001eb8 <__udivdi3+0x1d4> + +80002118 <__umoddi3>: + d0 = dd.s.low; +80002118: 00060893 mv a7,a2 + d1 = dd.s.high; +8000211c: 00068713 mv a4,a3 + n0 = nn.s.low; +80002120: 00050793 mv a5,a0 + n1 = nn.s.high; +80002124: 00058813 mv a6,a1 + if (d1 == 0) +80002128: 22069c63 bnez a3,80002360 <__umoddi3+0x248> +8000212c: 800026b7 lui a3,0x80002 +80002130: 68068693 addi a3,a3,1664 # 80002680 + if (d0 > n1) +80002134: 0cc5fc63 bleu a2,a1,8000220c <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +80002138: 00010337 lui t1,0x10 +8000213c: 0a667e63 bleu t1,a2,800021f8 <__umoddi3+0xe0> +80002140: 0ff00313 li t1,255 +80002144: 00c37463 bleu a2,t1,8000214c <__umoddi3+0x34> +80002148: 00800713 li a4,8 +8000214c: 00e65333 srl t1,a2,a4 +80002150: 006686b3 add a3,a3,t1 +80002154: 0006ce03 lbu t3,0(a3) +80002158: 02000313 li t1,32 +8000215c: 00ee0e33 add t3,t3,a4 +80002160: 41c30333 sub t1,t1,t3 + if (bm != 0) +80002164: 00030c63 beqz t1,8000217c <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80002168: 006595b3 sll a1,a1,t1 +8000216c: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80002170: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80002174: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +80002178: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +8000217c: 0108d613 srli a2,a7,0x10 +80002180: 02c87733 remu a4,a6,a2 +80002184: 01089513 slli a0,a7,0x10 +80002188: 01055513 srli a0,a0,0x10 +8000218c: 0107d693 srli a3,a5,0x10 +80002190: 02c85833 divu a6,a6,a2 +80002194: 01071713 slli a4,a4,0x10 +80002198: 00d766b3 or a3,a4,a3 +8000219c: 03050833 mul a6,a0,a6 +800021a0: 0106fa63 bleu a6,a3,800021b4 <__umoddi3+0x9c> +800021a4: 011686b3 add a3,a3,a7 +800021a8: 0116e663 bltu a3,a7,800021b4 <__umoddi3+0x9c> +800021ac: 0106f463 bleu a6,a3,800021b4 <__umoddi3+0x9c> +800021b0: 011686b3 add a3,a3,a7 +800021b4: 410686b3 sub a3,a3,a6 +800021b8: 02c6f733 remu a4,a3,a2 +800021bc: 01079793 slli a5,a5,0x10 +800021c0: 0107d793 srli a5,a5,0x10 +800021c4: 02c6d6b3 divu a3,a3,a2 +800021c8: 02d506b3 mul a3,a0,a3 +800021cc: 01071513 slli a0,a4,0x10 +800021d0: 00f567b3 or a5,a0,a5 +800021d4: 00d7fa63 bleu a3,a5,800021e8 <__umoddi3+0xd0> +800021d8: 011787b3 add a5,a5,a7 +800021dc: 0117e663 bltu a5,a7,800021e8 <__umoddi3+0xd0> +800021e0: 00d7f463 bleu a3,a5,800021e8 <__umoddi3+0xd0> +800021e4: 011787b3 add a5,a5,a7 +800021e8: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +800021ec: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +800021f0: 00000593 li a1,0 +} +800021f4: 00008067 ret + count_leading_zeros (bm, d0); +800021f8: 01000337 lui t1,0x1000 +800021fc: 01000713 li a4,16 +80002200: f46666e3 bltu a2,t1,8000214c <__umoddi3+0x34> +80002204: 01800713 li a4,24 +80002208: f45ff06f j 8000214c <__umoddi3+0x34> + if (d0 == 0) +8000220c: 00061663 bnez a2,80002218 <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80002210: 00100613 li a2,1 +80002214: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +80002218: 00010637 lui a2,0x10 +8000221c: 0ac8f263 bleu a2,a7,800022c0 <__umoddi3+0x1a8> +80002220: 0ff00613 li a2,255 +80002224: 01167463 bleu a7,a2,8000222c <__umoddi3+0x114> +80002228: 00800713 li a4,8 +8000222c: 00e8d633 srl a2,a7,a4 +80002230: 00c686b3 add a3,a3,a2 +80002234: 0006ce03 lbu t3,0(a3) +80002238: 02000313 li t1,32 +8000223c: 00ee0e33 add t3,t3,a4 +80002240: 41c30333 sub t1,t1,t3 + if (bm == 0) +80002244: 08031863 bnez t1,800022d4 <__umoddi3+0x1bc> + n1 -= d0; +80002248: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +8000224c: 0108d713 srli a4,a7,0x10 +80002250: 01089513 slli a0,a7,0x10 +80002254: 01055513 srli a0,a0,0x10 +80002258: 0107d613 srli a2,a5,0x10 +8000225c: 02e5f6b3 remu a3,a1,a4 +80002260: 02e5d5b3 divu a1,a1,a4 +80002264: 01069693 slli a3,a3,0x10 +80002268: 00c6e6b3 or a3,a3,a2 +8000226c: 02b505b3 mul a1,a0,a1 +80002270: 00b6fa63 bleu a1,a3,80002284 <__umoddi3+0x16c> +80002274: 011686b3 add a3,a3,a7 +80002278: 0116e663 bltu a3,a7,80002284 <__umoddi3+0x16c> +8000227c: 00b6f463 bleu a1,a3,80002284 <__umoddi3+0x16c> +80002280: 011686b3 add a3,a3,a7 +80002284: 40b685b3 sub a1,a3,a1 +80002288: 02e5f6b3 remu a3,a1,a4 +8000228c: 01079793 slli a5,a5,0x10 +80002290: 0107d793 srli a5,a5,0x10 +80002294: 02e5d5b3 divu a1,a1,a4 +80002298: 02b505b3 mul a1,a0,a1 +8000229c: 01069513 slli a0,a3,0x10 +800022a0: 00f567b3 or a5,a0,a5 +800022a4: 00b7fa63 bleu a1,a5,800022b8 <__umoddi3+0x1a0> +800022a8: 011787b3 add a5,a5,a7 +800022ac: 0117e663 bltu a5,a7,800022b8 <__umoddi3+0x1a0> +800022b0: 00b7f463 bleu a1,a5,800022b8 <__umoddi3+0x1a0> +800022b4: 011787b3 add a5,a5,a7 +800022b8: 40b787b3 sub a5,a5,a1 +800022bc: f31ff06f j 800021ec <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800022c0: 01000637 lui a2,0x1000 +800022c4: 01000713 li a4,16 +800022c8: f6c8e2e3 bltu a7,a2,8000222c <__umoddi3+0x114> +800022cc: 01800713 li a4,24 +800022d0: f5dff06f j 8000222c <__umoddi3+0x114> + d0 = d0 << bm; +800022d4: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800022d8: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +800022dc: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +800022e0: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +800022e4: 0108d513 srli a0,a7,0x10 +800022e8: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +800022ec: 006595b3 sll a1,a1,t1 +800022f0: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +800022f4: 01089593 slli a1,a7,0x10 +800022f8: 0105d593 srli a1,a1,0x10 +800022fc: 010e5613 srli a2,t3,0x10 +80002300: 02a75733 divu a4,a4,a0 +80002304: 01069693 slli a3,a3,0x10 +80002308: 00c6e6b3 or a3,a3,a2 +8000230c: 02e58733 mul a4,a1,a4 +80002310: 00e6fa63 bleu a4,a3,80002324 <__umoddi3+0x20c> +80002314: 011686b3 add a3,a3,a7 +80002318: 0116e663 bltu a3,a7,80002324 <__umoddi3+0x20c> +8000231c: 00e6f463 bleu a4,a3,80002324 <__umoddi3+0x20c> +80002320: 011686b3 add a3,a3,a7 +80002324: 40e68633 sub a2,a3,a4 +80002328: 02a676b3 remu a3,a2,a0 +8000232c: 010e1e13 slli t3,t3,0x10 +80002330: 010e5e13 srli t3,t3,0x10 +80002334: 02a65633 divu a2,a2,a0 +80002338: 01069693 slli a3,a3,0x10 +8000233c: 02c58633 mul a2,a1,a2 +80002340: 01c6e5b3 or a1,a3,t3 +80002344: 00c5fa63 bleu a2,a1,80002358 <__umoddi3+0x240> +80002348: 011585b3 add a1,a1,a7 +8000234c: 0115e663 bltu a1,a7,80002358 <__umoddi3+0x240> +80002350: 00c5f463 bleu a2,a1,80002358 <__umoddi3+0x240> +80002354: 011585b3 add a1,a1,a7 +80002358: 40c585b3 sub a1,a1,a2 +8000235c: ef1ff06f j 8000224c <__umoddi3+0x134> + if (d1 > n1) +80002360: e8d5eae3 bltu a1,a3,800021f4 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80002364: 00010737 lui a4,0x10 +80002368: 04e6fc63 bleu a4,a3,800023c0 <__umoddi3+0x2a8> +8000236c: 0ff00e93 li t4,255 +80002370: 00deb733 sltu a4,t4,a3 +80002374: 00371713 slli a4,a4,0x3 +80002378: 80002337 lui t1,0x80002 +8000237c: 00e6d8b3 srl a7,a3,a4 +80002380: 68030313 addi t1,t1,1664 # 80002680 +80002384: 006888b3 add a7,a7,t1 +80002388: 0008ce83 lbu t4,0(a7) # 1000000 +8000238c: 02000e13 li t3,32 +80002390: 00ee8eb3 add t4,t4,a4 +80002394: 41de0e33 sub t3,t3,t4 + if (bm == 0) +80002398: 020e1e63 bnez t3,800023d4 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +8000239c: 00b6e463 bltu a3,a1,800023a4 <__umoddi3+0x28c> +800023a0: 00c56a63 bltu a0,a2,800023b4 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800023a4: 40c507b3 sub a5,a0,a2 +800023a8: 40d585b3 sub a1,a1,a3 +800023ac: 00f53533 sltu a0,a0,a5 +800023b0: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800023b4: 00078513 mv a0,a5 +800023b8: 00080593 mv a1,a6 +800023bc: e39ff06f j 800021f4 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800023c0: 010008b7 lui a7,0x1000 +800023c4: 01000713 li a4,16 +800023c8: fb16e8e3 bltu a3,a7,80002378 <__umoddi3+0x260> +800023cc: 01800713 li a4,24 +800023d0: fa9ff06f j 80002378 <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800023d4: 01d65733 srl a4,a2,t4 +800023d8: 01c696b3 sll a3,a3,t3 +800023dc: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +800023e0: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +800023e4: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +800023e8: 01c595b3 sll a1,a1,t3 +800023ec: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +800023f0: 0106d593 srli a1,a3,0x10 +800023f4: 02b77333 remu t1,a4,a1 +800023f8: 01069f13 slli t5,a3,0x10 +800023fc: 010f5f13 srli t5,t5,0x10 +80002400: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80002404: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +80002408: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000240c: 02b75733 divu a4,a4,a1 +80002410: 01031313 slli t1,t1,0x10 +80002414: 011368b3 or a7,t1,a7 +80002418: 02ef0833 mul a6,t5,a4 +8000241c: 00070313 mv t1,a4 +80002420: 0108fe63 bleu a6,a7,8000243c <__umoddi3+0x324> +80002424: 00d888b3 add a7,a7,a3 +80002428: fff70313 addi t1,a4,-1 # ffff +8000242c: 00d8e863 bltu a7,a3,8000243c <__umoddi3+0x324> +80002430: 0108f663 bleu a6,a7,8000243c <__umoddi3+0x324> +80002434: ffe70313 addi t1,a4,-2 +80002438: 00d888b3 add a7,a7,a3 +8000243c: 410888b3 sub a7,a7,a6 +80002440: 02b8ffb3 remu t6,a7,a1 +80002444: 02b8d8b3 divu a7,a7,a1 +80002448: 010f9f93 slli t6,t6,0x10 +8000244c: 031f05b3 mul a1,t5,a7 +80002450: 01079f13 slli t5,a5,0x10 +80002454: 010f5f13 srli t5,t5,0x10 +80002458: 01efef33 or t5,t6,t5 +8000245c: 00088713 mv a4,a7 +80002460: 00bf7e63 bleu a1,t5,8000247c <__umoddi3+0x364> +80002464: 00df0f33 add t5,t5,a3 +80002468: fff88713 addi a4,a7,-1 # ffffff +8000246c: 00df6863 bltu t5,a3,8000247c <__umoddi3+0x364> +80002470: 00bf7663 bleu a1,t5,8000247c <__umoddi3+0x364> +80002474: ffe88713 addi a4,a7,-2 +80002478: 00df0f33 add t5,t5,a3 +8000247c: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +80002480: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002484: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +80002488: fff88793 addi a5,a7,-1 # ffff +8000248c: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002490: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +80002494: 00f375b3 and a1,t1,a5 +80002498: 01035313 srli t1,t1,0x10 +8000249c: 00f677b3 and a5,a2,a5 +800024a0: 02f58733 mul a4,a1,a5 +800024a4: 02f307b3 mul a5,t1,a5 +800024a8: 030585b3 mul a1,a1,a6 +800024ac: 03030333 mul t1,t1,a6 +800024b0: 00f585b3 add a1,a1,a5 +800024b4: 01075813 srli a6,a4,0x10 +800024b8: 00b80833 add a6,a6,a1 +800024bc: 00f87463 bleu a5,a6,800024c4 <__umoddi3+0x3ac> +800024c0: 01130333 add t1,t1,a7 +800024c4: 000107b7 lui a5,0x10 +800024c8: fff78793 addi a5,a5,-1 # ffff +800024cc: 01085593 srli a1,a6,0x10 +800024d0: 00f87833 and a6,a6,a5 +800024d4: 01081813 slli a6,a6,0x10 +800024d8: 00f77733 and a4,a4,a5 +800024dc: 006585b3 add a1,a1,t1 +800024e0: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800024e4: 00bf6663 bltu t5,a1,800024f0 <__umoddi3+0x3d8> +800024e8: 00bf1e63 bne t5,a1,80002504 <__umoddi3+0x3ec> +800024ec: 00e57c63 bleu a4,a0,80002504 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +800024f0: 40c70633 sub a2,a4,a2 +800024f4: 00c73733 sltu a4,a4,a2 +800024f8: 40d585b3 sub a1,a1,a3 +800024fc: 40e585b3 sub a1,a1,a4 +80002500: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80002504: 40e50733 sub a4,a0,a4 +80002508: 00e53533 sltu a0,a0,a4 +8000250c: 40bf05b3 sub a1,t5,a1 +80002510: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80002514: 01d597b3 sll a5,a1,t4 +80002518: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +8000251c: 00e7e533 or a0,a5,a4 +80002520: 01c5d5b3 srl a1,a1,t3 + return w; +80002524: cd1ff06f j 800021f4 <__umoddi3+0xdc> + +Disassembly of section .data: + +800027fc : +// See LICENSE for license details. + + +#define DATA_SIZE 400 + +int input_data[DATA_SIZE] = +800027fc: 0029 c.nop 10 +800027fe: 0000 unimp +80002800: 01c6 slli gp,gp,0x11 +80002802: 0000 unimp +80002804: 0341 addi t1,t1,16 +80002806: 0000 unimp +80002808: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +8000280c: 0234 addi a3,sp,264 +8000280e: 0000 unimp +80002810: 0001 nop +80002812: 0000 unimp +80002814: 000000bb 0xbb +80002818: 03dd addi t2,t2,23 +8000281a: 0000 unimp +8000281c: 02ed addi t0,t0,27 +8000281e: 0000 unimp +80002820: 016d addi sp,sp,27 +80002822: 0000 unimp +80002824: 015e slli sp,sp,0x17 +80002826: 0000 unimp +80002828: 023c addi a5,sp,264 +8000282a: 0000 unimp +8000282c: 0084 addi s1,sp,64 +8000282e: 0000 unimp +80002830: 0040 addi s0,sp,4 +80002832: 0000 unimp +80002834: 03b5 addi t2,t2,13 +80002836: 0000 unimp +80002838: 0099 addi ra,ra,6 +8000283a: 0000 unimp +8000283c: 0248 addi a0,sp,260 +8000283e: 0000 unimp +80002840: 00d8 addi a4,sp,68 +80002842: 0000 unimp +80002844: 0325 addi t1,t1,9 +80002846: 0000 unimp +80002848: 008c addi a1,sp,64 +8000284a: 0000 unimp +8000284c: 026d addi tp,tp,27 +8000284e: 0000 unimp +80002850: 00d2 slli ra,ra,0x14 +80002852: 0000 unimp +80002854: 0006 c.slli zero,0x1 +80002856: 0000 unimp +80002858: 023c addi a5,sp,264 +8000285a: 0000 unimp +8000285c: 000003a3 sb zero,7(zero) # 7 +80002860: 00000153 fadd.s ft2,ft0,ft0,rne +80002864: 037a slli t1,t1,0x1e +80002866: 0000 unimp +80002868: 0251 addi tp,tp,20 +8000286a: 0000 unimp +8000286c: 0188 addi a0,sp,192 +8000286e: 0000 unimp +80002870: 0382 slli t2,t2,0x0 +80002872: 0000 unimp +80002874: 02b6 slli t0,t0,0xd +80002876: 0000 unimp +80002878: 00e4 addi s1,sp,76 +8000287a: 0000 unimp +8000287c: 03c1 addi t2,t2,16 +8000287e: 0000 unimp +80002880: 000c 0xc +80002882: 0000 unimp +80002884: 006e c.slli zero,0x1b +80002886: 0000 unimp +80002888: 00000373 0x373 +8000288c: 0074 addi a3,sp,12 +8000288e: 0000 unimp +80002890: 02ee slli t0,t0,0x1b +80002892: 0000 unimp +80002894: 0128 addi a0,sp,136 +80002896: 0000 unimp +80002898: 0286 slli t0,t0,0x1 +8000289a: 0000 unimp +8000289c: 01aa slli gp,gp,0xa +8000289e: 0000 unimp +800028a0: 01f4 addi a3,sp,204 +800028a2: 0000 unimp +800028a4: 013a slli sp,sp,0xe +800028a6: 0000 unimp +800028a8: 01b4 addi a3,sp,200 +800028aa: 0000 unimp +800028ac: 00000293 li t0,0 +800028b0: 02bd addi t0,t0,15 +800028b2: 0000 unimp +800028b4: 0306 slli t1,t1,0x1 +800028b6: 0000 unimp +800028b8: 032c addi a1,sp,392 +800028ba: 0000 unimp +800028bc: 0000013f 000003d5 0x3d50000013f +800028c4: 02a6 slli t0,t0,0x9 +800028c6: 0000 unimp +800028c8: 0096 slli ra,ra,0x5 +800028ca: 0000 unimp +800028cc: 0000036b 0x36b +800028d0: 02b8 addi a4,sp,328 +800028d2: 0000 unimp +800028d4: 0178 addi a4,sp,140 +800028d6: 0000 unimp +800028d8: 0234 addi a3,sp,264 +800028da: 0000 unimp +800028dc: 01da slli gp,gp,0x16 +800028de: 0000 unimp +800028e0: 0110 addi a2,sp,128 +800028e2: 0000 unimp +800028e4: 03aa slli t2,t2,0xa +800028e6: 0000 unimp +800028e8: 0102 slli sp,sp,0x0 +800028ea: 0000 unimp +800028ec: 0000021b 0x21b +800028f0: 00000287 0x287 +800028f4: 0239 addi tp,tp,14 +800028f6: 0000 unimp +800028f8: 01fd addi gp,gp,31 +800028fa: 0000 unimp +800028fc: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002900: 0058 addi a4,sp,4 +80002902: 0000 unimp +80002904: 0118 addi a4,sp,128 +80002906: 0000 unimp +80002908: 000002bf 000002f7 0x2f7000002bf +80002910: 029d addi t0,t0,7 +80002912: 0000 unimp +80002914: 025e slli tp,tp,0x17 +80002916: 0000 unimp +80002918: 00000177 0x177 +8000291c: 01ff 0x1ff +8000291e: 0000 unimp +80002920: 00000227 0x227 +80002924: 0291 addi t0,t0,4 +80002926: 0000 unimp +80002928: 03a8 addi a0,sp,456 +8000292a: 0000 unimp +8000292c: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002930: 0250 addi a2,sp,260 +80002932: 0000 unimp +80002934: 0051 c.nop 20 +80002936: 0000 unimp +80002938: 0239 addi tp,tp,14 +8000293a: 0000 unimp +8000293c: 0000010b 0x10b +80002940: 03b8 addi a4,sp,456 +80002942: 0000 unimp +80002944: 00e5 addi ra,ra,25 +80002946: 0000 unimp +80002948: 0320 addi s0,sp,392 +8000294a: 0000 unimp +8000294c: 0151 addi sp,sp,20 +8000294e: 0000 unimp +80002950: 0248 addi a0,sp,260 +80002952: 0000 unimp +80002954: 03b0 addi a2,sp,456 +80002956: 0000 unimp +80002958: 00000283 lb t0,0(zero) # 0 +8000295c: 0386 slli t2,t2,0x1 +8000295e: 0000 unimp +80002960: 0170 addi a2,sp,140 +80002962: 0000 unimp +80002964: 00f1 addi ra,ra,28 +80002966: 0000 unimp +80002968: 01e9 addi gp,gp,26 +8000296a: 0000 unimp +8000296c: 0391 addi t2,t2,4 +8000296e: 0000 unimp +80002970: 0148 addi a0,sp,132 +80002972: 0000 unimp +80002974: 033a slli t1,t1,0xe +80002976: 0000 unimp +80002978: 0139 addi sp,sp,14 +8000297a: 0000 unimp +8000297c: 03a5 addi t2,t2,9 +8000297e: 0000 unimp +80002980: 0250 addi a2,sp,260 +80002982: 0000 unimp +80002984: 03d9 addi t2,t2,22 +80002986: 0000 unimp +80002988: 0184 addi s1,sp,192 +8000298a: 0000 unimp +8000298c: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002990: 021f 0000 03c0 0x3c00000021f +80002996: 0000 unimp +80002998: 0289 addi t0,t0,2 +8000299a: 0000 unimp +8000299c: 0236 slli tp,tp,0xd +8000299e: 0000 unimp +800029a0: 000003d3 fadd.s ft7,ft0,ft0,rne +800029a4: 015e slli sp,sp,0x17 +800029a6: 0000 unimp +800029a8: 03e5 addi t2,t2,25 +800029aa: 0000 unimp +800029ac: 0289 addi t0,t0,2 +800029ae: 0000 unimp +800029b0: 032e slli t1,t1,0xb +800029b2: 0000 unimp +800029b4: 0291 addi t0,t0,4 +800029b6: 0000 unimp +800029b8: 0000004f fnmadd.s ft0,ft0,ft0,ft0,rne +800029bc: 00b5 addi ra,ra,13 +800029be: 0000 unimp +800029c0: 00d0 addi a2,sp,68 +800029c2: 0000 unimp +800029c4: 0000006f j 800029c4 +800029c8: 03e6 slli t2,t2,0x19 +800029ca: 0000 unimp +800029cc: 0000035b 0x35b +800029d0: 0275 addi tp,tp,29 +800029d2: 0000 unimp +800029d4: 0041 c.nop 16 +800029d6: 0000 unimp +800029d8: 0000034f fnmadd.s ft6,ft0,ft0,ft0,rne +800029dc: 0120 addi s0,sp,136 +800029de: 0000 unimp +800029e0: 02c0 addi s0,sp,324 +800029e2: 0000 unimp +800029e4: 015d addi sp,sp,23 +800029e6: 0000 unimp +800029e8: 03e5 addi t2,t2,25 +800029ea: 0000 unimp +800029ec: 008d addi ra,ra,3 +800029ee: 0000 unimp +800029f0: 00fd addi ra,ra,31 +800029f2: 0000 unimp +800029f4: 0389 addi t2,t2,2 +800029f6: 0000 unimp +800029f8: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +800029fc: 0376 slli t1,t1,0x1d +800029fe: 0000 unimp +80002a00: 01ae slli gp,gp,0xb +80002a02: 0000 unimp +80002a04: 0108 addi a0,sp,128 +80002a06: 0000 unimp +80002a08: 019f 0000 0240 0x2400000019f +80002a0e: 0000 unimp +80002a10: 021a slli tp,tp,0x6 +80002a12: 0000 unimp +80002a14: 000003d3 fadd.s ft7,ft0,ft0,rne +80002a18: 02bc addi a5,sp,328 +80002a1a: 0000 unimp +80002a1c: 02f9 addi t0,t0,30 +80002a1e: 0000 unimp +80002a20: 0004 0x4 +80002a22: 0000 unimp +80002a24: 00f1 addi ra,ra,28 +80002a26: 0000 unimp +80002a28: 01ee slli gp,gp,0x1b +80002a2a: 0000 unimp +80002a2c: 01de slli gp,gp,0x17 +80002a2e: 0000 unimp +80002a30: 0064 addi s1,sp,12 +80002a32: 0000 unimp +80002a34: 000001f3 0x1f3 +80002a38: 0360 addi s0,sp,396 +80002a3a: 0000 unimp +80002a3c: 00000193 li gp,0 +80002a40: 02b5 addi t0,t0,13 +80002a42: 0000 unimp +80002a44: 00de slli ra,ra,0x17 +80002a46: 0000 unimp +80002a48: 01a0 addi s0,sp,200 +80002a4a: 0000 unimp +80002a4c: 01bc addi a5,sp,200 +80002a4e: 0000 unimp +80002a50: 0128 addi a0,sp,136 +80002a52: 0000 unimp +80002a54: 02d1 addi t0,t0,20 +80002a56: 0000 unimp +80002a58: 011d addi sp,sp,7 +80002a5a: 0000 unimp +80002a5c: 02a4 addi s1,sp,328 +80002a5e: 0000 unimp +80002a60: 026c addi a1,sp,268 +80002a62: 0000 unimp +80002a64: 013d addi sp,sp,15 +80002a66: 0000 unimp +80002a68: 004e c.slli zero,0x13 +80002a6a: 0000 unimp +80002a6c: 00e0 addi s0,sp,76 +80002a6e: 0000 unimp +80002a70: 015f 0000 03a9 0x3a90000015f +80002a76: 0000 unimp +80002a78: 021c addi a5,sp,256 +80002a7a: 0000 unimp +80002a7c: 0120 addi s0,sp,136 +80002a7e: 0000 unimp +80002a80: 0286 slli t0,t0,0x1 +80002a82: 0000 unimp +80002a84: 00000077 0x77 +80002a88: 00a9 addi ra,ra,10 +80002a8a: 0000 unimp +80002a8c: 00000267 jalr tp,zero +80002a90: 0000020f 0x20f +80002a94: 025e slli tp,tp,0x17 +80002a96: 0000 unimp +80002a98: 0121 addi sp,sp,8 +80002a9a: 0000 unimp +80002a9c: 0185 addi gp,gp,1 +80002a9e: 0000 unimp +80002aa0: 031c addi a5,sp,384 +80002aa2: 0000 unimp +80002aa4: 015f 0000 0321 0x3210000015f +80002aaa: 0000 unimp +80002aac: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +80002ab0: 02d0 addi a2,sp,324 +80002ab2: 0000 unimp +80002ab4: 0116 slli sp,sp,0x5 +80002ab6: 0000 unimp +80002ab8: 02f6 slli t0,t0,0x1d +80002aba: 0000 unimp +80002abc: 0000016f jal sp,80002abc +80002ac0: 02e9 addi t0,t0,26 +80002ac2: 0000 unimp +80002ac4: 0166 slli sp,sp,0x19 +80002ac6: 0000 unimp +80002ac8: 005c addi a5,sp,4 +80002aca: 0000 unimp +80002acc: 0248 addi a0,sp,260 +80002ace: 0000 unimp +80002ad0: 03dd addi t2,t2,23 +80002ad2: 0000 unimp +80002ad4: 003e c.slli zero,0xf +80002ad6: 0000 unimp +80002ad8: 0000010f 0x10f +80002adc: 03d9 addi t2,t2,22 +80002ade: 0000 unimp +80002ae0: 0355 addi t1,t1,21 +80002ae2: 0000 unimp +80002ae4: 00000193 li gp,0 +80002ae8: 0314 addi a3,sp,384 +80002aea: 0000 unimp +80002aec: 015a slli sp,sp,0x16 +80002aee: 0000 unimp +80002af0: 00000213 li tp,0 +80002af4: 0205 addi tp,tp,1 +80002af6: 0000 unimp +80002af8: 00de slli ra,ra,0x17 +80002afa: 0000 unimp +80002afc: 0000022f 0x22f +80002b00: 01cd addi gp,gp,19 +80002b02: 0000 unimp +80002b04: 038c addi a1,sp,448 +80002b06: 0000 unimp +80002b08: 00f1 addi ra,ra,28 +80002b0a: 0000 unimp +80002b0c: 00000307 0x307 +80002b10: 0166 slli sp,sp,0x19 +80002b12: 0000 unimp +80002b14: 00ff 0xff +80002b16: 0000 unimp +80002b18: 014c addi a1,sp,132 +80002b1a: 0000 unimp +80002b1c: 030a slli t1,t1,0x2 +80002b1e: 0000 unimp +80002b20: 02ac addi a1,sp,328 +80002b22: 0000 unimp +80002b24: 0256 slli tp,tp,0x15 +80002b26: 0000 unimp +80002b28: 02e4 addi s1,sp,332 +80002b2a: 0000 unimp +80002b2c: 0000008f 0x8f +80002b30: 01be slli gp,gp,0xf +80002b32: 0000 unimp +80002b34: 0021 c.nop 8 +80002b36: 0000 unimp +80002b38: 00000137 lui sp,0x0 +80002b3c: 007d c.nop 31 +80002b3e: 0000 unimp +80002b40: 000002e7 jalr t0,zero +80002b44: 03ad addi t2,t2,11 +80002b46: 0000 unimp +80002b48: 022d addi tp,tp,11 +80002b4a: 0000 unimp +80002b4c: 03a5 addi t2,t2,9 +80002b4e: 0000 unimp +80002b50: 01df 0000 031f 0x31f000001df +80002b56: 0000 unimp +80002b58: 022d addi tp,tp,11 +80002b5a: 0000 unimp +80002b5c: 0229 addi tp,tp,10 +80002b5e: 0000 unimp +80002b60: 039d addi t2,t2,7 +80002b62: 0000 unimp +80002b64: 000001af 0x1af +80002b68: 031c addi a5,sp,384 +80002b6a: 0000 unimp +80002b6c: 0288 addi a0,sp,320 +80002b6e: 0000 unimp +80002b70: 0165 addi sp,sp,25 +80002b72: 0000 unimp +80002b74: 03b8 addi a4,sp,456 +80002b76: 0000 unimp +80002b78: 0000037b 0x37b +80002b7c: 011f 0000 029a 0x29a0000011f +80002b82: 0000 unimp +80002b84: 00000013 nop +80002b88: 0202 slli tp,tp,0x0 +80002b8a: 0000 unimp +80002b8c: 0031 c.nop 12 +80002b8e: 0000 unimp +80002b90: 022d addi tp,tp,11 +80002b92: 0000 unimp +80002b94: 0056 c.slli zero,0x15 +80002b96: 0000 unimp +80002b98: 0366 slli t1,t1,0x19 +80002b9a: 0000 unimp +80002b9c: 005f 0000 0355 0x3550000005f +80002ba2: 0000 unimp +80002ba4: 01b9 addi gp,gp,14 +80002ba6: 0000 unimp +80002ba8: 01b8 addi a4,sp,200 +80002baa: 0000 unimp +80002bac: 0000024b fnmsub.s ft4,ft0,ft0,ft0,rne +80002bb0: 003d c.nop 15 +80002bb2: 0000 unimp +80002bb4: 0266 slli tp,tp,0x19 +80002bb6: 0000 unimp +80002bb8: 02a6 slli t0,t0,0x9 +80002bba: 0000 unimp +80002bbc: 017e slli sp,sp,0x1f +80002bbe: 0000 unimp +80002bc0: 018c addi a1,sp,192 +80002bc2: 0000 unimp +80002bc4: 0118 addi a4,sp,128 +80002bc6: 0000 unimp +80002bc8: 0009 c.nop 2 +80002bca: 0000 unimp +80002bcc: 0328 addi a0,sp,392 +80002bce: 0000 unimp +80002bd0: 0011 c.nop 4 +80002bd2: 0000 unimp +80002bd4: 000003cb fnmsub.s ft7,ft0,ft0,ft0,rne +80002bd8: 00aa slli ra,ra,0xa +80002bda: 0000 unimp +80002bdc: 00000333 add t1,zero,zero +80002be0: 00000123 sb zero,2(zero) # 2 +80002be4: 0158 addi a4,sp,132 +80002be6: 0000 unimp +80002be8: 017c addi a5,sp,140 +80002bea: 0000 unimp +80002bec: 01c2 slli gp,gp,0x10 +80002bee: 0000 unimp +80002bf0: 0218 addi a4,sp,256 +80002bf2: 0000 unimp +80002bf4: 0200 addi s0,sp,256 +80002bf6: 0000 unimp +80002bf8: 00b9 addi ra,ra,14 +80002bfa: 0000 unimp +80002bfc: 03c5 addi t2,t2,17 +80002bfe: 0000 unimp +80002c00: 0395 addi t2,t2,5 +80002c02: 0000 unimp +80002c04: 0000015b 0x15b +80002c08: 0000021b 0x21b +80002c0c: 0328 addi a0,sp,392 +80002c0e: 0000 unimp +80002c10: 000003d7 0x3d7 +80002c14: 0372 slli t1,t1,0x1c +80002c16: 0000 unimp +80002c18: 00000377 0x377 +80002c1c: 0219 addi tp,tp,6 +80002c1e: 0000 unimp +80002c20: 0036 c.slli zero,0xd +80002c22: 0000 unimp +80002c24: 03b2 slli t2,t2,0xc +80002c26: 0000 unimp +80002c28: 0264 addi s1,sp,268 +80002c2a: 0000 unimp +80002c2c: 02bd addi t0,t0,15 +80002c2e: 0000 unimp +80002c30: 000003b7 lui t2,0x0 +80002c34: 0164 addi s1,sp,140 +80002c36: 0000 unimp +80002c38: 01df 0000 0237 0x237000001df +80002c3e: 0000 unimp +80002c40: 00000097 auipc ra,0x0 +80002c44: 0000037b 0x37b +80002c48: 00000007 0x7 +80002c4c: 0016 c.slli zero,0x5 +80002c4e: 0000 unimp +80002c50: 0281 addi t0,t0,0 +80002c52: 0000 unimp +80002c54: 0238 addi a4,sp,264 +80002c56: 0000 unimp +80002c58: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +80002c5c: 0299 addi t0,t0,6 +80002c5e: 0000 unimp +80002c60: 02da slli t0,t0,0x16 +80002c62: 0000 unimp +80002c64: 000001a7 0x1a7 +80002c68: 005f 0000 01b2 0x1b20000005f +80002c6e: 0000 unimp +80002c70: 02d8 addi a4,sp,324 +80002c72: 0000 unimp +80002c74: 009e slli ra,ra,0x7 +80002c76: 0000 unimp +80002c78: 0118 addi a4,sp,128 +80002c7a: 0000 unimp +80002c7c: 0002 c.slli zero,0x0 +80002c7e: 0000 unimp +80002c80: 0000018b 0x18b +80002c84: 0054 addi a3,sp,4 +80002c86: 0000 unimp +80002c88: 02b0 addi a2,sp,328 +80002c8a: 0000 unimp +80002c8c: 000000f7 0xf7 +80002c90: 0000038f 0x38f +80002c94: 0031 c.nop 12 +80002c96: 0000 unimp +80002c98: 01dc addi a5,sp,196 +80002c9a: 0000 unimp +80002c9c: 000001b3 add gp,zero,zero +80002ca0: 0000032f 0x32f +80002ca4: 0318 addi a4,sp,384 +80002ca6: 0000 unimp +80002ca8: 02d9 addi t0,t0,22 +80002caa: 0000 unimp +80002cac: 0365 addi t1,t1,25 +80002cae: 0000 unimp +80002cb0: 0109 addi sp,sp,2 +80002cb2: 0000 unimp +80002cb4: 01e6 slli gp,gp,0x19 +80002cb6: 0000 unimp +80002cb8: 007f 0x7f +80002cba: 0000 unimp +80002cbc: 019e slli gp,gp,0x7 +80002cbe: 0000 unimp +80002cc0: 00ec addi a1,sp,76 +80002cc2: 0000 unimp +80002cc4: 0171 addi sp,sp,28 +80002cc6: 0000 unimp +80002cc8: 00d6 slli ra,ra,0x15 +80002cca: 0000 unimp +80002ccc: 0224 addi s1,sp,264 +80002cce: 0000 unimp +80002cd0: 00b4 addi a3,sp,72 +80002cd2: 0000 unimp +80002cd4: 0206 slli tp,tp,0x1 +80002cd6: 0000 unimp +80002cd8: 0006 c.slli zero,0x1 +80002cda: 0000 unimp +80002cdc: 0378 addi a4,sp,396 +80002cde: 0000 unimp +80002ce0: 000001f7 0x1f7 +80002ce4: 02aa slli t0,t0,0xa +80002ce6: 0000 unimp +80002ce8: 0254 addi a3,sp,260 +80002cea: 0000 unimp +80002cec: 011c addi a5,sp,128 +80002cee: 0000 unimp +80002cf0: 00ad addi ra,ra,11 +80002cf2: 0000 unimp +80002cf4: 0108 addi a0,sp,128 +80002cf6: 0000 unimp +80002cf8: 00000283 lb t0,0(zero) # 0 +80002cfc: 000001f3 0x1f3 +80002d00: 015a slli sp,sp,0x16 +80002d02: 0000 unimp +80002d04: 0122 slli sp,sp,0x8 +80002d06: 0000 unimp +80002d08: 00000257 0x257 +80002d0c: 0381 addi t2,t2,0 +80002d0e: 0000 unimp +80002d10: 0044 addi s1,sp,4 +80002d12: 0000 unimp +80002d14: 000000d7 0xd7 +80002d18: 0351 addi t1,t1,20 +80002d1a: 0000 unimp +80002d1c: 000002db 0x2db +80002d20: 0292 slli t0,t0,0x4 +80002d22: 0000 unimp +80002d24: 02b0 addi a2,sp,328 +80002d26: 0000 unimp +80002d28: 0000026b 0x26b +80002d2c: 000000fb 0xfb +80002d30: 0079 c.nop 30 +80002d32: 0000 unimp +80002d34: 0312 slli t1,t1,0x4 +80002d36: 0000 unimp +80002d38: 00000083 lb ra,0(zero) # 0 +80002d3c: 0000022b 0x22b +80002d40: 033c addi a5,sp,392 +80002d42: 0000 unimp +80002d44: 012e slli sp,sp,0xb +80002d46: 0000 unimp +80002d48: 0000029b 0x29b +80002d4c: 0210 addi a2,sp,256 +80002d4e: 0000 unimp +80002d50: 01b1 addi gp,gp,12 +80002d52: 0000 unimp +80002d54: 0220 addi s0,sp,264 +80002d56: 0000 unimp +80002d58: 000001e7 jalr gp,zero +80002d5c: 0142 slli sp,sp,0x10 +80002d5e: 0000 unimp +80002d60: 02f1 addi t0,t0,28 +80002d62: 0000 unimp +80002d64: 000003b3 add t2,zero,zero +80002d68: 007d c.nop 31 +80002d6a: 0000 unimp +80002d6c: 011f 0000 0272 0x2720000011f +80002d72: 0000 unimp +80002d74: 0338 addi a4,sp,392 +80002d76: 0000 unimp +80002d78: 000e c.slli zero,0x3 +80002d7a: 0000 unimp +80002d7c: 0130 addi a2,sp,136 +80002d7e: 0000 unimp +80002d80: 000a c.slli zero,0x2 +80002d82: 0000 unimp +80002d84: 0314 addi a3,sp,384 +80002d86: 0000 unimp +80002d88: 00000193 li gp,0 +80002d8c: 02dd addi t0,t0,23 +80002d8e: 0000 unimp +80002d90: 006a c.slli zero,0x1a +80002d92: 0000 unimp +80002d94: 000003bf 000002bf 0x2bf000003bf +80002d9c: 016e slli sp,sp,0x1b +80002d9e: 0000 unimp +80002da0: 0332 slli t1,t1,0xc +80002da2: 0000 unimp +80002da4: 02d2 slli t0,t0,0x14 +80002da6: 0000 unimp +80002da8: 03c4 addi s1,sp,452 +80002daa: 0000 unimp +80002dac: 0126 slli sp,sp,0x9 +80002dae: 0000 unimp +80002db0: 0196 slli gp,gp,0x5 +80002db2: 0000 unimp +80002db4: 000003cf fnmadd.s ft7,ft0,ft0,ft0,rne +80002db8: 036a slli t1,t1,0x1a +80002dba: 0000 unimp +80002dbc: 028d addi t0,t0,3 +80002dbe: 0000 unimp +80002dc0: 0358 addi a4,sp,388 +80002dc2: 0000 unimp +80002dc4: 02ec addi a1,sp,332 +80002dc6: 0000 unimp +80002dc8: 0056 c.slli zero,0x15 +80002dca: 0000 unimp +80002dcc: 0000005b 0x5b +80002dd0: 003c addi a5,sp,8 +80002dd2: 0000 unimp +80002dd4: 017a slli sp,sp,0x1e +80002dd6: 0000 unimp +80002dd8: 0294 addi a3,sp,320 +80002dda: 0000 unimp +80002ddc: 0069 c.nop 26 +80002dde: 0000 unimp +80002de0: 0000029b 0x29b +80002de4: 0066 c.slli zero,0x19 +80002de6: 0000 unimp +80002de8: 0099 addi ra,ra,6 +80002dea: 0000 unimp +80002dec: 017d addi sp,sp,31 +80002dee: 0000 unimp +80002df0: 0079 c.nop 30 +80002df2: 0000 unimp +80002df4: 0000028b 0x28b +80002df8: 0062 c.slli zero,0x18 +80002dfa: 0000 unimp +80002dfc: 0339 addi t1,t1,14 +80002dfe: 0000 unimp +80002e00: 019c addi a5,sp,192 +80002e02: 0000 unimp +80002e04: 0348 addi a0,sp,388 +80002e06: 0000 unimp +80002e08: 00ec addi a1,sp,76 +80002e0a: 0000 unimp +80002e0c: 0164 addi s1,sp,140 +80002e0e: 0000 unimp +80002e10: 000c 0xc +80002e12: 0000 unimp +80002e14: 0094 addi a3,sp,64 +80002e16: 0000 unimp +80002e18: 000001a7 0x1a7 +80002e1c: 0036 c.slli zero,0xd +80002e1e: 0000 unimp +80002e20: 03c5 addi t2,t2,17 +80002e22: 0000 unimp +80002e24: 008c addi a1,sp,64 +80002e26: 0000 unimp +80002e28: 00d8 addi a4,sp,68 +80002e2a: 0000 unimp +80002e2c: 000003bb 0x3bb +80002e30: 026d addi tp,tp,27 +80002e32: 0000 unimp +80002e34: 00000157 0x157 +80002e38: 0169 addi sp,sp,26 +80002e3a: 0000 unimp + +80002e3c : + 528, 433, 544, 487, 322, 753, 947, 125, 287, 626, 824, 14, 304, 10, 788, 403, 733, 106, 959, 703, + 366, 818, 722, 964, 294, 406, 975, 874, 653, 856, 748, 86, 91, 60, 378, 660, 105, 667, 102, 153, + 381, 121, 651, 98, 825, 412, 840, 236, 356, 12, 148, 423, 54, 965, 140, 216, 955, 621, 343, 361 +}; + +int verify_data[DATA_SIZE] = +80002e3c: 0000 unimp +80002e3e: 0000 unimp +80002e40: 01c6 slli gp,gp,0x11 +80002e42: 0000 unimp +80002e44: 01c6 slli gp,gp,0x11 +80002e46: 0000 unimp +80002e48: 0234 addi a3,sp,264 +80002e4a: 0000 unimp +80002e4c: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +80002e50: 000000bb 0xbb +80002e54: 000000bb 0xbb +80002e58: 02ed addi t0,t0,27 +80002e5a: 0000 unimp +80002e5c: 02ed addi t0,t0,27 +80002e5e: 0000 unimp +80002e60: 016d addi sp,sp,27 +80002e62: 0000 unimp +80002e64: 016d addi sp,sp,27 +80002e66: 0000 unimp +80002e68: 015e slli sp,sp,0x17 +80002e6a: 0000 unimp +80002e6c: 0084 addi s1,sp,64 +80002e6e: 0000 unimp +80002e70: 0084 addi s1,sp,64 +80002e72: 0000 unimp +80002e74: 0099 addi ra,ra,6 +80002e76: 0000 unimp +80002e78: 0248 addi a0,sp,260 +80002e7a: 0000 unimp +80002e7c: 00d8 addi a4,sp,68 +80002e7e: 0000 unimp +80002e80: 0248 addi a0,sp,260 +80002e82: 0000 unimp +80002e84: 00d8 addi a4,sp,68 +80002e86: 0000 unimp +80002e88: 026d addi tp,tp,27 +80002e8a: 0000 unimp +80002e8c: 00d2 slli ra,ra,0x14 +80002e8e: 0000 unimp +80002e90: 00d2 slli ra,ra,0x14 +80002e92: 0000 unimp +80002e94: 00d2 slli ra,ra,0x14 +80002e96: 0000 unimp +80002e98: 023c addi a5,sp,264 +80002e9a: 0000 unimp +80002e9c: 023c addi a5,sp,264 +80002e9e: 0000 unimp +80002ea0: 037a slli t1,t1,0x1e +80002ea2: 0000 unimp +80002ea4: 0251 addi tp,tp,20 +80002ea6: 0000 unimp +80002ea8: 0251 addi tp,tp,20 +80002eaa: 0000 unimp +80002eac: 0251 addi tp,tp,20 +80002eae: 0000 unimp +80002eb0: 02b6 slli t0,t0,0xd +80002eb2: 0000 unimp +80002eb4: 02b6 slli t0,t0,0xd +80002eb6: 0000 unimp +80002eb8: 02b6 slli t0,t0,0xd +80002eba: 0000 unimp +80002ebc: 00e4 addi s1,sp,76 +80002ebe: 0000 unimp +80002ec0: 006e c.slli zero,0x1b +80002ec2: 0000 unimp +80002ec4: 006e c.slli zero,0x1b +80002ec6: 0000 unimp +80002ec8: 0074 addi a3,sp,12 +80002eca: 0000 unimp +80002ecc: 02ee slli t0,t0,0x1b +80002ece: 0000 unimp +80002ed0: 0128 addi a0,sp,136 +80002ed2: 0000 unimp +80002ed4: 0286 slli t0,t0,0x1 +80002ed6: 0000 unimp +80002ed8: 01aa slli gp,gp,0xa +80002eda: 0000 unimp +80002edc: 01f4 addi a3,sp,204 +80002ede: 0000 unimp +80002ee0: 01aa slli gp,gp,0xa +80002ee2: 0000 unimp +80002ee4: 01b4 addi a3,sp,200 +80002ee6: 0000 unimp +80002ee8: 01b4 addi a3,sp,200 +80002eea: 0000 unimp +80002eec: 00000293 li t0,0 +80002ef0: 02bd addi t0,t0,15 +80002ef2: 0000 unimp +80002ef4: 0306 slli t1,t1,0x1 +80002ef6: 0000 unimp +80002ef8: 0306 slli t1,t1,0x1 +80002efa: 0000 unimp +80002efc: 032c addi a1,sp,392 +80002efe: 0000 unimp +80002f00: 02a6 slli t0,t0,0x9 +80002f02: 0000 unimp +80002f04: 02a6 slli t0,t0,0x9 +80002f06: 0000 unimp +80002f08: 02a6 slli t0,t0,0x9 +80002f0a: 0000 unimp +80002f0c: 02b8 addi a4,sp,328 +80002f0e: 0000 unimp +80002f10: 02b8 addi a4,sp,328 +80002f12: 0000 unimp +80002f14: 0234 addi a3,sp,264 +80002f16: 0000 unimp +80002f18: 01da slli gp,gp,0x16 +80002f1a: 0000 unimp +80002f1c: 01da slli gp,gp,0x16 +80002f1e: 0000 unimp +80002f20: 01da slli gp,gp,0x16 +80002f22: 0000 unimp +80002f24: 0110 addi a2,sp,128 +80002f26: 0000 unimp +80002f28: 0000021b 0x21b +80002f2c: 0000021b 0x21b +80002f30: 0239 addi tp,tp,14 +80002f32: 0000 unimp +80002f34: 0239 addi tp,tp,14 +80002f36: 0000 unimp +80002f38: 01fd addi gp,gp,31 +80002f3a: 0000 unimp +80002f3c: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002f40: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002f44: 0118 addi a4,sp,128 +80002f46: 0000 unimp +80002f48: 000002bf 000002bf 0x2bf000002bf +80002f50: 029d addi t0,t0,7 +80002f52: 0000 unimp +80002f54: 025e slli tp,tp,0x17 +80002f56: 0000 unimp +80002f58: 01ff 0x1ff +80002f5a: 0000 unimp +80002f5c: 01ff 0x1ff +80002f5e: 0000 unimp +80002f60: 00000227 0x227 +80002f64: 0291 addi t0,t0,4 +80002f66: 0000 unimp +80002f68: 0291 addi t0,t0,4 +80002f6a: 0000 unimp +80002f6c: 0250 addi a2,sp,260 +80002f6e: 0000 unimp +80002f70: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002f74: 0239 addi tp,tp,14 +80002f76: 0000 unimp +80002f78: 0000010b 0x10b +80002f7c: 0239 addi tp,tp,14 +80002f7e: 0000 unimp +80002f80: 0000010b 0x10b +80002f84: 0320 addi s0,sp,392 +80002f86: 0000 unimp +80002f88: 0151 addi sp,sp,20 +80002f8a: 0000 unimp +80002f8c: 0248 addi a0,sp,260 +80002f8e: 0000 unimp +80002f90: 0248 addi a0,sp,260 +80002f92: 0000 unimp +80002f94: 00000283 lb t0,0(zero) # 0 +80002f98: 0386 slli t2,t2,0x1 +80002f9a: 0000 unimp +80002f9c: 00000283 lb t0,0(zero) # 0 +80002fa0: 0170 addi a2,sp,140 +80002fa2: 0000 unimp +80002fa4: 0170 addi a2,sp,140 +80002fa6: 0000 unimp +80002fa8: 01e9 addi gp,gp,26 +80002faa: 0000 unimp +80002fac: 01e9 addi gp,gp,26 +80002fae: 0000 unimp +80002fb0: 033a slli t1,t1,0xe +80002fb2: 0000 unimp +80002fb4: 0148 addi a0,sp,132 +80002fb6: 0000 unimp +80002fb8: 033a slli t1,t1,0xe +80002fba: 0000 unimp +80002fbc: 0250 addi a2,sp,260 +80002fbe: 0000 unimp +80002fc0: 03a5 addi t2,t2,9 +80002fc2: 0000 unimp +80002fc4: 0250 addi a2,sp,260 +80002fc6: 0000 unimp +80002fc8: 0184 addi s1,sp,192 +80002fca: 0000 unimp +80002fcc: 0184 addi s1,sp,192 +80002fce: 0000 unimp +80002fd0: 021f 0000 0289 0x2890000021f +80002fd6: 0000 unimp +80002fd8: 0289 addi t0,t0,2 +80002fda: 0000 unimp +80002fdc: 0289 addi t0,t0,2 +80002fde: 0000 unimp +80002fe0: 0236 slli tp,tp,0xd +80002fe2: 0000 unimp +80002fe4: 000003d3 fadd.s ft7,ft0,ft0,rne +80002fe8: 0289 addi t0,t0,2 +80002fea: 0000 unimp +80002fec: 032e slli t1,t1,0xb +80002fee: 0000 unimp +80002ff0: 0291 addi t0,t0,4 +80002ff2: 0000 unimp +80002ff4: 0291 addi t0,t0,4 +80002ff6: 0000 unimp +80002ff8: 00b5 addi ra,ra,13 +80002ffa: 0000 unimp +80002ffc: 00b5 addi ra,ra,13 +80002ffe: 0000 unimp +80003000: 00b5 addi ra,ra,13 +80003002: 0000 unimp +80003004: 00d0 addi a2,sp,68 +80003006: 0000 unimp +80003008: 0000035b 0x35b +8000300c: 0000035b 0x35b +80003010: 0275 addi tp,tp,29 +80003012: 0000 unimp +80003014: 0275 addi tp,tp,29 +80003016: 0000 unimp +80003018: 0120 addi s0,sp,136 +8000301a: 0000 unimp +8000301c: 02c0 addi s0,sp,324 +8000301e: 0000 unimp +80003020: 015d addi sp,sp,23 +80003022: 0000 unimp +80003024: 02c0 addi s0,sp,324 +80003026: 0000 unimp +80003028: 015d addi sp,sp,23 +8000302a: 0000 unimp +8000302c: 00fd addi ra,ra,31 +8000302e: 0000 unimp +80003030: 00fd addi ra,ra,31 +80003032: 0000 unimp +80003034: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +80003038: 0376 slli t1,t1,0x1d +8000303a: 0000 unimp +8000303c: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +80003040: 01ae slli gp,gp,0xb +80003042: 0000 unimp +80003044: 019f 0000 019f 0x19f0000019f +8000304a: 0000 unimp +8000304c: 021a slli tp,tp,0x6 +8000304e: 0000 unimp +80003050: 0240 addi s0,sp,260 +80003052: 0000 unimp +80003054: 02bc addi a5,sp,328 +80003056: 0000 unimp +80003058: 02f9 addi t0,t0,30 +8000305a: 0000 unimp +8000305c: 02bc addi a5,sp,328 +8000305e: 0000 unimp +80003060: 00f1 addi ra,ra,28 +80003062: 0000 unimp +80003064: 00f1 addi ra,ra,28 +80003066: 0000 unimp +80003068: 01de slli gp,gp,0x17 +8000306a: 0000 unimp +8000306c: 01de slli gp,gp,0x17 +8000306e: 0000 unimp +80003070: 01de slli gp,gp,0x17 +80003072: 0000 unimp +80003074: 000001f3 0x1f3 +80003078: 000001f3 0x1f3 +8000307c: 02b5 addi t0,t0,13 +8000307e: 0000 unimp +80003080: 00000193 li gp,0 +80003084: 01a0 addi s0,sp,200 +80003086: 0000 unimp +80003088: 01a0 addi s0,sp,200 +8000308a: 0000 unimp +8000308c: 01a0 addi s0,sp,200 +8000308e: 0000 unimp +80003090: 01bc addi a5,sp,200 +80003092: 0000 unimp +80003094: 0128 addi a0,sp,136 +80003096: 0000 unimp +80003098: 02a4 addi s1,sp,328 +8000309a: 0000 unimp +8000309c: 026c addi a1,sp,268 +8000309e: 0000 unimp +800030a0: 026c addi a1,sp,268 +800030a2: 0000 unimp +800030a4: 013d addi sp,sp,15 +800030a6: 0000 unimp +800030a8: 00e0 addi s0,sp,76 +800030aa: 0000 unimp +800030ac: 00e0 addi s0,sp,76 +800030ae: 0000 unimp +800030b0: 015f 0000 021c 0x21c0000015f +800030b6: 0000 unimp +800030b8: 021c addi a5,sp,256 +800030ba: 0000 unimp +800030bc: 021c addi a5,sp,256 +800030be: 0000 unimp +800030c0: 0120 addi s0,sp,136 +800030c2: 0000 unimp +800030c4: 00a9 addi ra,ra,10 +800030c6: 0000 unimp +800030c8: 00a9 addi ra,ra,10 +800030ca: 0000 unimp +800030cc: 0000020f 0x20f +800030d0: 025e slli tp,tp,0x17 +800030d2: 0000 unimp +800030d4: 0000020f 0x20f +800030d8: 0185 addi gp,gp,1 +800030da: 0000 unimp +800030dc: 0185 addi gp,gp,1 +800030de: 0000 unimp +800030e0: 0185 addi gp,gp,1 +800030e2: 0000 unimp +800030e4: 031c addi a5,sp,384 +800030e6: 0000 unimp +800030e8: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +800030ec: 02d0 addi a2,sp,324 +800030ee: 0000 unimp +800030f0: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +800030f4: 02d0 addi a2,sp,324 +800030f6: 0000 unimp +800030f8: 0000016f jal sp,800030f8 +800030fc: 02e9 addi t0,t0,26 +800030fe: 0000 unimp +80003100: 0000016f jal sp,80003100 +80003104: 0166 slli sp,sp,0x19 +80003106: 0000 unimp +80003108: 0166 slli sp,sp,0x19 +8000310a: 0000 unimp +8000310c: 0248 addi a0,sp,260 +8000310e: 0000 unimp +80003110: 0248 addi a0,sp,260 +80003112: 0000 unimp +80003114: 0000010f 0x10f +80003118: 0000010f 0x10f +8000311c: 0355 addi t1,t1,21 +8000311e: 0000 unimp +80003120: 0355 addi t1,t1,21 +80003122: 0000 unimp +80003124: 0314 addi a3,sp,384 +80003126: 0000 unimp +80003128: 00000193 li gp,0 +8000312c: 00000213 li tp,0 +80003130: 0205 addi tp,tp,1 +80003132: 0000 unimp +80003134: 0205 addi tp,tp,1 +80003136: 0000 unimp +80003138: 0205 addi tp,tp,1 +8000313a: 0000 unimp +8000313c: 01cd addi gp,gp,19 +8000313e: 0000 unimp +80003140: 0000022f 0x22f +80003144: 01cd addi gp,gp,19 +80003146: 0000 unimp +80003148: 00000307 0x307 +8000314c: 0166 slli sp,sp,0x19 +8000314e: 0000 unimp +80003150: 0166 slli sp,sp,0x19 +80003152: 0000 unimp +80003154: 014c addi a1,sp,132 +80003156: 0000 unimp +80003158: 014c addi a1,sp,132 +8000315a: 0000 unimp +8000315c: 02ac addi a1,sp,328 +8000315e: 0000 unimp +80003160: 02ac addi a1,sp,328 +80003162: 0000 unimp +80003164: 02ac addi a1,sp,328 +80003166: 0000 unimp +80003168: 0256 slli tp,tp,0x15 +8000316a: 0000 unimp +8000316c: 01be slli gp,gp,0xf +8000316e: 0000 unimp +80003170: 0000008f 0x8f +80003174: 00000137 lui sp,0x0 +80003178: 007d c.nop 31 +8000317a: 0000 unimp +8000317c: 00000137 lui sp,0x0 +80003180: 000002e7 jalr t0,zero +80003184: 000002e7 jalr t0,zero +80003188: 03a5 addi t2,t2,9 +8000318a: 0000 unimp +8000318c: 022d addi tp,tp,11 +8000318e: 0000 unimp +80003190: 031f 0000 022d 0x22d0000031f +80003196: 0000 unimp +80003198: 022d addi tp,tp,11 +8000319a: 0000 unimp +8000319c: 022d addi tp,tp,11 +8000319e: 0000 unimp +800031a0: 0229 addi tp,tp,10 +800031a2: 0000 unimp +800031a4: 031c addi a5,sp,384 +800031a6: 0000 unimp +800031a8: 0288 addi a0,sp,320 +800031aa: 0000 unimp +800031ac: 0288 addi a0,sp,320 +800031ae: 0000 unimp +800031b0: 0288 addi a0,sp,320 +800031b2: 0000 unimp +800031b4: 0000037b 0x37b +800031b8: 0000037b 0x37b +800031bc: 029a slli t0,t0,0x6 +800031be: 0000 unimp +800031c0: 011f 0000 0202 0x2020000011f +800031c6: 0000 unimp +800031c8: 0031 c.nop 12 +800031ca: 0000 unimp +800031cc: 0202 slli tp,tp,0x0 +800031ce: 0000 unimp +800031d0: 0056 c.slli zero,0x15 +800031d2: 0000 unimp +800031d4: 022d addi tp,tp,11 +800031d6: 0000 unimp +800031d8: 005f 0000 0355 0x3550000005f +800031de: 0000 unimp +800031e0: 01b9 addi gp,gp,14 +800031e2: 0000 unimp +800031e4: 01b9 addi gp,gp,14 +800031e6: 0000 unimp +800031e8: 01b9 addi gp,gp,14 +800031ea: 0000 unimp +800031ec: 01b8 addi a4,sp,200 +800031ee: 0000 unimp +800031f0: 0000024b fnmsub.s ft4,ft0,ft0,ft0,rne +800031f4: 0266 slli tp,tp,0x19 +800031f6: 0000 unimp +800031f8: 0266 slli tp,tp,0x19 +800031fa: 0000 unimp +800031fc: 018c addi a1,sp,192 +800031fe: 0000 unimp +80003200: 017e slli sp,sp,0x1f +80003202: 0000 unimp +80003204: 0118 addi a4,sp,128 +80003206: 0000 unimp +80003208: 0118 addi a4,sp,128 +8000320a: 0000 unimp +8000320c: 0011 c.nop 4 +8000320e: 0000 unimp +80003210: 0328 addi a0,sp,392 +80003212: 0000 unimp +80003214: 00aa slli ra,ra,0xa +80003216: 0000 unimp +80003218: 00000333 add t1,zero,zero +8000321c: 00000123 sb zero,2(zero) # 2 +80003220: 0158 addi a4,sp,132 +80003222: 0000 unimp +80003224: 0158 addi a4,sp,132 +80003226: 0000 unimp +80003228: 017c addi a5,sp,140 +8000322a: 0000 unimp +8000322c: 01c2 slli gp,gp,0x10 +8000322e: 0000 unimp +80003230: 0200 addi s0,sp,256 +80003232: 0000 unimp +80003234: 0200 addi s0,sp,256 +80003236: 0000 unimp +80003238: 0200 addi s0,sp,256 +8000323a: 0000 unimp +8000323c: 0395 addi t2,t2,5 +8000323e: 0000 unimp +80003240: 0395 addi t2,t2,5 +80003242: 0000 unimp +80003244: 0000021b 0x21b +80003248: 0000021b 0x21b +8000324c: 0328 addi a0,sp,392 +8000324e: 0000 unimp +80003250: 0372 slli t1,t1,0x1c +80003252: 0000 unimp +80003254: 00000377 0x377 +80003258: 0372 slli t1,t1,0x1c +8000325a: 0000 unimp +8000325c: 0219 addi tp,tp,6 +8000325e: 0000 unimp +80003260: 0219 addi tp,tp,6 +80003262: 0000 unimp +80003264: 0264 addi s1,sp,268 +80003266: 0000 unimp +80003268: 02bd addi t0,t0,15 +8000326a: 0000 unimp +8000326c: 02bd addi t0,t0,15 +8000326e: 0000 unimp +80003270: 02bd addi t0,t0,15 +80003272: 0000 unimp +80003274: 01df 0000 01df 0x1df000001df +8000327a: 0000 unimp +8000327c: 01df 0000 0237 0x237000001df +80003282: 0000 unimp +80003284: 00000097 auipc ra,0x0 +80003288: 0016 c.slli zero,0x5 +8000328a: 0000 unimp +8000328c: 0016 c.slli zero,0x5 +8000328e: 0000 unimp +80003290: 0238 addi a4,sp,264 +80003292: 0000 unimp +80003294: 0238 addi a4,sp,264 +80003296: 0000 unimp +80003298: 0238 addi a4,sp,264 +8000329a: 0000 unimp +8000329c: 0299 addi t0,t0,6 +8000329e: 0000 unimp +800032a0: 0299 addi t0,t0,6 +800032a2: 0000 unimp +800032a4: 000001a7 0x1a7 +800032a8: 000001a7 0x1a7 +800032ac: 01b2 slli gp,gp,0xc +800032ae: 0000 unimp +800032b0: 01b2 slli gp,gp,0xc +800032b2: 0000 unimp +800032b4: 0118 addi a4,sp,128 +800032b6: 0000 unimp +800032b8: 009e slli ra,ra,0x7 +800032ba: 0000 unimp +800032bc: 0118 addi a4,sp,128 +800032be: 0000 unimp +800032c0: 0054 addi a3,sp,4 +800032c2: 0000 unimp +800032c4: 0000018b 0x18b +800032c8: 000000f7 0xf7 +800032cc: 02b0 addi a2,sp,328 +800032ce: 0000 unimp +800032d0: 000000f7 0xf7 +800032d4: 01dc addi a5,sp,196 +800032d6: 0000 unimp +800032d8: 000001b3 add gp,zero,zero +800032dc: 01dc addi a5,sp,196 +800032de: 0000 unimp +800032e0: 0318 addi a4,sp,384 +800032e2: 0000 unimp +800032e4: 0318 addi a4,sp,384 +800032e6: 0000 unimp +800032e8: 0318 addi a4,sp,384 +800032ea: 0000 unimp +800032ec: 02d9 addi t0,t0,22 +800032ee: 0000 unimp +800032f0: 01e6 slli gp,gp,0x19 +800032f2: 0000 unimp +800032f4: 0109 addi sp,sp,2 +800032f6: 0000 unimp +800032f8: 019e slli gp,gp,0x7 +800032fa: 0000 unimp +800032fc: 00ec addi a1,sp,76 +800032fe: 0000 unimp +80003300: 0171 addi sp,sp,28 +80003302: 0000 unimp +80003304: 00ec addi a1,sp,76 +80003306: 0000 unimp +80003308: 0171 addi sp,sp,28 +8000330a: 0000 unimp +8000330c: 00d6 slli ra,ra,0x15 +8000330e: 0000 unimp +80003310: 0206 slli tp,tp,0x1 +80003312: 0000 unimp +80003314: 00b4 addi a3,sp,72 +80003316: 0000 unimp +80003318: 0206 slli tp,tp,0x1 +8000331a: 0000 unimp +8000331c: 000001f7 0x1f7 +80003320: 02aa slli t0,t0,0xa +80003322: 0000 unimp +80003324: 0254 addi a3,sp,260 +80003326: 0000 unimp +80003328: 0254 addi a3,sp,260 +8000332a: 0000 unimp +8000332c: 011c addi a5,sp,128 +8000332e: 0000 unimp +80003330: 0108 addi a0,sp,128 +80003332: 0000 unimp +80003334: 0108 addi a0,sp,128 +80003336: 0000 unimp +80003338: 000001f3 0x1f3 +8000333c: 000001f3 0x1f3 +80003340: 015a slli sp,sp,0x16 +80003342: 0000 unimp +80003344: 015a slli sp,sp,0x16 +80003346: 0000 unimp +80003348: 00000257 0x257 +8000334c: 00000257 0x257 +80003350: 000000d7 0xd7 +80003354: 000000d7 0xd7 +80003358: 000002db 0x2db +8000335c: 000002db 0x2db +80003360: 02b0 addi a2,sp,328 +80003362: 0000 unimp +80003364: 0292 slli t0,t0,0x4 +80003366: 0000 unimp +80003368: 0000026b 0x26b +8000336c: 000000fb 0xfb +80003370: 000000fb 0xfb +80003374: 00000083 lb ra,0(zero) # 0 +80003378: 0000022b 0x22b +8000337c: 0000022b 0x22b +80003380: 0000022b 0x22b +80003384: 0000029b 0x29b +80003388: 0210 addi a2,sp,256 +8000338a: 0000 unimp +8000338c: 0210 addi a2,sp,256 +8000338e: 0000 unimp +80003390: 0210 addi a2,sp,256 +80003392: 0000 unimp +80003394: 000001e7 jalr gp,zero +80003398: 000001e7 jalr gp,zero +8000339c: 000001e7 jalr gp,zero +800033a0: 02f1 addi t0,t0,28 +800033a2: 0000 unimp +800033a4: 02f1 addi t0,t0,28 +800033a6: 0000 unimp +800033a8: 011f 0000 011f 0x11f0000011f +800033ae: 0000 unimp +800033b0: 0272 slli tp,tp,0x1c +800033b2: 0000 unimp +800033b4: 0272 slli tp,tp,0x1c +800033b6: 0000 unimp +800033b8: 0130 addi a2,sp,136 +800033ba: 0000 unimp +800033bc: 000e c.slli zero,0x3 +800033be: 0000 unimp +800033c0: 0130 addi a2,sp,136 +800033c2: 0000 unimp +800033c4: 00000193 li gp,0 +800033c8: 02dd addi t0,t0,23 +800033ca: 0000 unimp +800033cc: 00000193 li gp,0 +800033d0: 02dd addi t0,t0,23 +800033d2: 0000 unimp +800033d4: 000002bf 000002bf 0x2bf000002bf +800033dc: 000002bf 000002d2 0x2d2000002bf +800033e4: 0332 slli t1,t1,0xc +800033e6: 0000 unimp +800033e8: 02d2 slli t0,t0,0x14 +800033ea: 0000 unimp +800033ec: 0196 slli gp,gp,0x5 +800033ee: 0000 unimp +800033f0: 0196 slli gp,gp,0x5 +800033f2: 0000 unimp +800033f4: 036a slli t1,t1,0x1a +800033f6: 0000 unimp +800033f8: 036a slli t1,t1,0x1a +800033fa: 0000 unimp +800033fc: 0358 addi a4,sp,388 +800033fe: 0000 unimp +80003400: 02ec addi a1,sp,332 +80003402: 0000 unimp +80003404: 02ec addi a1,sp,332 +80003406: 0000 unimp +80003408: 0000005b 0x5b +8000340c: 0056 c.slli zero,0x15 +8000340e: 0000 unimp +80003410: 0000005b 0x5b +80003414: 017a slli sp,sp,0x1e +80003416: 0000 unimp +80003418: 017a slli sp,sp,0x1e +8000341a: 0000 unimp +8000341c: 0294 addi a3,sp,320 +8000341e: 0000 unimp +80003420: 0069 c.nop 26 +80003422: 0000 unimp +80003424: 0099 addi ra,ra,6 +80003426: 0000 unimp +80003428: 0099 addi ra,ra,6 +8000342a: 0000 unimp +8000342c: 0099 addi ra,ra,6 +8000342e: 0000 unimp +80003430: 017d addi sp,sp,31 +80003432: 0000 unimp +80003434: 0079 c.nop 30 +80003436: 0000 unimp +80003438: 0000028b 0x28b +8000343c: 019c addi a5,sp,192 +8000343e: 0000 unimp +80003440: 0339 addi t1,t1,14 +80003442: 0000 unimp +80003444: 019c addi a5,sp,192 +80003446: 0000 unimp +80003448: 0164 addi s1,sp,140 +8000344a: 0000 unimp +8000344c: 00ec addi a1,sp,76 +8000344e: 0000 unimp +80003450: 0094 addi a3,sp,64 +80003452: 0000 unimp +80003454: 0094 addi a3,sp,64 +80003456: 0000 unimp +80003458: 0094 addi a3,sp,64 +8000345a: 0000 unimp +8000345c: 000001a7 0x1a7 +80003460: 008c addi a1,sp,64 +80003462: 0000 unimp +80003464: 00d8 addi a4,sp,68 +80003466: 0000 unimp +80003468: 00d8 addi a4,sp,68 +8000346a: 0000 unimp +8000346c: 026d addi tp,tp,27 +8000346e: 0000 unimp +80003470: 026d addi tp,tp,27 +80003472: 0000 unimp +80003474: 0169 addi sp,sp,26 +80003476: 0000 unimp +80003478: 0000 unimp +8000347a: 0000 unimp diff --git a/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.riscv b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.riscv new file mode 100755 index 0000000..b623cc4 Binary files /dev/null and b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.riscv differ diff --git a/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.sid_0.pkl b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.sid_0.pkl new file mode 100644 index 0000000..9efb051 Binary files /dev/null and b/analyzer/expdir/ctest/median-stream/DefaultRV32Config/median-stream.sid_0.pkl differ diff --git a/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.dump.annot b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.dump.annot new file mode 100644 index 0000000..36df76c --- /dev/null +++ b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.dump.annot @@ -0,0 +1,3617 @@ + +median-stream.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 00004197 auipc gp,0x4 +800000b0: bd018193 addi gp,gp,-1072 # 80003c7c <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 88318213 addi tp,gp,-1917 # 800034ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 2650106f j 80001b40 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 314010ef jal ra,80001480 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : + +static int verify(int n, const volatile int* test, const int* verify) +{ + int i; + // Unrolled for faster verification + for (i = 0; i < n/2*2; i+=2) +80001048: 00000713 li a4,0 +8000104c: 01f55793 srli a5,a0,0x1f +80001050: 00a787b3 add a5,a5,a0 +80001054: ffe7f793 andi a5,a5,-2 +80001058: 04f75863 ble a5,a4,800010a8 + { + int t0 = test[i], t1 = test[i+1]; +8000105c: 00271693 slli a3,a4,0x2 +80001060: 00d587b3 add a5,a1,a3 +80001064: 0007a803 lw a6,0(a5) +80001068: 00170793 addi a5,a4,1 +8000106c: 00279793 slli a5,a5,0x2 +80001070: 00f588b3 add a7,a1,a5 +80001074: 0008a883 lw a7,0(a7) + int v0 = verify[i], v1 = verify[i+1]; +80001078: 00d606b3 add a3,a2,a3 +8000107c: 0006a683 lw a3,0(a3) +80001080: 00f607b3 add a5,a2,a5 +80001084: 0007a783 lw a5,0(a5) + if (t0 != v0) return i+1; +80001088: 00d81863 bne a6,a3,80001098 + if (t1 != v1) return i+2; +8000108c: 00f89a63 bne a7,a5,800010a0 + for (i = 0; i < n/2*2; i+=2) +80001090: 00270713 addi a4,a4,2 +80001094: fb9ff06f j 8000104c + if (t0 != v0) return i+1; +80001098: 00170513 addi a0,a4,1 +8000109c: 00008067 ret + if (t1 != v1) return i+2; +800010a0: 00270513 addi a0,a4,2 +800010a4: 00008067 ret + } + if (n % 2 != 0 && test[n-1] != verify[n-1]) +800010a8: 00157793 andi a5,a0,1 +800010ac: 02078863 beqz a5,800010dc +800010b0: 400007b7 lui a5,0x40000 +800010b4: fff78793 addi a5,a5,-1 # 3fffffff +800010b8: 00f507b3 add a5,a0,a5 +800010bc: 00279793 slli a5,a5,0x2 +800010c0: 00f585b3 add a1,a1,a5 +800010c4: 0005a703 lw a4,0(a1) +800010c8: 00f60633 add a2,a2,a5 +800010cc: 00062783 lw a5,0(a2) +800010d0: 00f71863 bne a4,a5,800010e0 + return n; + return 0; +800010d4: 00000513 li a0,0 +800010d8: 00008067 ret +800010dc: 00000513 li a0,0 +} +800010e0: 00008067 ret + +800010e4 : +void median( int n, int input[], int results[] ) +{ + int A, B, C, i; + + // Zero the ends + results[0] = 0; +800010e4: 00062023 sw zero,0(a2) + results[n-1] = 0; +800010e8: 400007b7 lui a5,0x40000 +800010ec: fff78793 addi a5,a5,-1 # 3fffffff +800010f0: 00f507b3 add a5,a0,a5 +800010f4: 00279793 slli a5,a5,0x2 +800010f8: 00f607b3 add a5,a2,a5 +800010fc: 0007a023 sw zero,0(a5) + + // Do the filter + for ( i = 1; i < (n-1); i++ ) { +80001100: 00100713 li a4,1 +80001104: 0300006f j 80001134 + C = input[i+1]; + + if ( A < B ) { + if ( B < C ) + results[i] = B; + else if ( C < A ) +80001108: 0117d863 ble a7,a5,80001118 + results[i] = A; +8000110c: 00d606b3 add a3,a2,a3 +80001110: 0116a023 sw a7,0(a3) +80001114: 01c0006f j 80001130 + else + results[i] = C; +80001118: 00d606b3 add a3,a2,a3 +8000111c: 00f6a023 sw a5,0(a3) +80001120: 0100006f j 80001130 + } + + else { + if ( A < C ) +80001124: 06f8d063 ble a5,a7,80001184 + results[i] = A; +80001128: 00d606b3 add a3,a2,a3 +8000112c: 0116a023 sw a7,0(a3) + for ( i = 1; i < (n-1); i++ ) { +80001130: 00170713 addi a4,a4,1 +80001134: fff50793 addi a5,a0,-1 +80001138: 06f75463 ble a5,a4,800011a0 + A = input[i-1]; +8000113c: 400007b7 lui a5,0x40000 +80001140: fff78793 addi a5,a5,-1 # 3fffffff +80001144: 00f707b3 add a5,a4,a5 +80001148: 00279793 slli a5,a5,0x2 +8000114c: 00f587b3 add a5,a1,a5 +80001150: 0007a883 lw a7,0(a5) + B = input[i]; +80001154: 00271693 slli a3,a4,0x2 +80001158: 00d587b3 add a5,a1,a3 +8000115c: 0007a803 lw a6,0(a5) + C = input[i+1]; +80001160: 00170793 addi a5,a4,1 +80001164: 00279793 slli a5,a5,0x2 +80001168: 00f587b3 add a5,a1,a5 +8000116c: 0007a783 lw a5,0(a5) + if ( A < B ) { +80001170: fb08dae3 ble a6,a7,80001124 + if ( B < C ) +80001174: f8f85ae3 ble a5,a6,80001108 + results[i] = B; +80001178: 00d606b3 add a3,a2,a3 +8000117c: 0106a023 sw a6,0(a3) +80001180: fb1ff06f j 80001130 + else if ( C < B ) +80001184: 0107d863 ble a6,a5,80001194 + results[i] = B; +80001188: 00d606b3 add a3,a2,a3 +8000118c: 0106a023 sw a6,0(a3) +80001190: fa1ff06f j 80001130 + else + results[i] = C; +80001194: 00d606b3 add a3,a2,a3 +80001198: 00f6a023 sw a5,0(a3) +8000119c: f95ff06f j 80001130 + } + + } + +} +800011a0: 00008067 ret + +800011a4
: + +//-------------------------------------------------------------------------- +// Main + +int main( int argc, char* argv[] ) +{ +800011a4: 9b010113 addi sp,sp,-1616 +800011a8: 64112623 sw ra,1612(sp) +800011ac: 64812423 sw s0,1608(sp) +800011b0: 64912223 sw s1,1604(sp) + int results_data[DATA_SIZE]; + + + // Do the filter + for (int i = 0; i < 10; ++i) +800011b4: 00000413 li s0,0 +800011b8: 03c0006f j 800011f4 + { +magic_start_stamp(0) +800011bc: 0efff497 auipc s1,0xefff +800011c0: e4448493 addi s1,s1,-444 # 8f000000 +800011c4: 149a07b7 lui a5,0x149a0 +800011c8: 00178793 addi a5,a5,1 # 149a0001 +800011cc: 00f4a023 sw a5,0(s1) + median( DATA_SIZE, input_data, results_data ); +800011d0: 00010613 mv a2,sp +800011d4: 00001597 auipc a1,0x1 +800011d8: 62858593 addi a1,a1,1576 # 800027fc +800011dc: 19000513 li a0,400 +800011e0: f05ff0ef jal ra,800010e4 +magic_end_stamp(0) +800011e4: 249a07b7 lui a5,0x249a0 +800011e8: 00178793 addi a5,a5,1 # 249a0001 +800011ec: 00f4a023 sw a5,0(s1) + for (int i = 0; i < 10; ++i) +800011f0: 00140413 addi s0,s0,1 +800011f4: 00900793 li a5,9 +800011f8: fc87d2e3 ble s0,a5,800011bc + } + + // Check the results + return verify( DATA_SIZE, results_data, verify_data ); +800011fc: 00002617 auipc a2,0x2 +80001200: c4060613 addi a2,a2,-960 # 80002e3c +80001204: 00010593 mv a1,sp +80001208: 19000513 li a0,400 +8000120c: e3dff0ef jal ra,80001048 +} +80001210: 64c12083 lw ra,1612(sp) +80001214: 64812403 lw s0,1608(sp) +80001218: 64412483 lw s1,1604(sp) +8000121c: 65010113 addi sp,sp,1616 +80001220: 00008067 ret + +80001224 : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001224: 00100793 li a5,1 +80001228: 02b7d263 ble a1,a5,8000124c + return va_arg(*ap, unsigned long long); +8000122c: 00052783 lw a5,0(a0) +80001230: 00778793 addi a5,a5,7 +80001234: ff87f793 andi a5,a5,-8 +80001238: 00878713 addi a4,a5,8 +8000123c: 00e52023 sw a4,0(a0) +80001240: 0007a503 lw a0,0(a5) +80001244: 0047a583 lw a1,4(a5) +80001248: 00008067 ret + else if (lflag) +8000124c: 00059e63 bnez a1,80001268 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80001250: 00052783 lw a5,0(a0) +80001254: 00478713 addi a4,a5,4 +80001258: 00e52023 sw a4,0(a0) +8000125c: 0007a503 lw a0,0(a5) +80001260: 00000593 li a1,0 +} +80001264: 00008067 ret + return va_arg(*ap, unsigned long); +80001268: 00052783 lw a5,0(a0) +8000126c: 00478713 addi a4,a5,4 +80001270: 00e52023 sw a4,0(a0) +80001274: 0007a503 lw a0,0(a5) +80001278: 00000593 li a1,0 +8000127c: 00008067 ret + +80001280 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001280: 00100793 li a5,1 +80001284: 02b7d263 ble a1,a5,800012a8 + return va_arg(*ap, long long); +80001288: 00052783 lw a5,0(a0) +8000128c: 00778793 addi a5,a5,7 +80001290: ff87f793 andi a5,a5,-8 +80001294: 00878713 addi a4,a5,8 +80001298: 00e52023 sw a4,0(a0) +8000129c: 0007a503 lw a0,0(a5) +800012a0: 0047a583 lw a1,4(a5) +800012a4: 00008067 ret + else if (lflag) +800012a8: 00059e63 bnez a1,800012c4 + return va_arg(*ap, long); + else + return va_arg(*ap, int); +800012ac: 00052783 lw a5,0(a0) +800012b0: 00478713 addi a4,a5,4 +800012b4: 00e52023 sw a4,0(a0) +800012b8: 0007a503 lw a0,0(a5) +800012bc: 41f55593 srai a1,a0,0x1f +} +800012c0: 00008067 ret + return va_arg(*ap, long); +800012c4: 00052783 lw a5,0(a0) +800012c8: 00478713 addi a4,a5,4 +800012cc: 00e52023 sw a4,0(a0) +800012d0: 0007a503 lw a0,0(a5) +800012d4: 41f55593 srai a1,a0,0x1f +800012d8: 00008067 ret + +800012dc : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800012dc: 0005a783 lw a5,0(a1) +800012e0: 00a78023 sb a0,0(a5) + (*pstr)++; +800012e4: 0005a783 lw a5,0(a1) +800012e8: 00178793 addi a5,a5,1 +800012ec: 00f5a023 sw a5,0(a1) + } +800012f0: 00008067 ret + +800012f4 : +{ +800012f4: f8010113 addi sp,sp,-128 +800012f8: 00060e93 mv t4,a2 +800012fc: 00070393 mv t2,a4 +80001300: 00080893 mv a7,a6 +80001304: 00078813 mv a6,a5 +80001308: 03f10613 addi a2,sp,63 +8000130c: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +80001310: 00000793 li a5,0 +80001314: 00a62023 sw a0,0(a2) +80001318: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +8000131c: 00b62423 sw a1,8(a2) +80001320: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +80001324: 00d62823 sw a3,16(a2) +80001328: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +8000132c: 01062c23 sw a6,24(a2) +80001330: 01162e23 sw a7,28(a2) + __sync_synchronize(); +80001334: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80001338: 00000793 li a5,0 +8000133c: 00000697 auipc a3,0x0 +80001340: cc468693 addi a3,a3,-828 # 80001000 +80001344: 00c6a023 sw a2,0(a3) +80001348: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +8000134c: 00000797 auipc a5,0x0 +80001350: cf478793 addi a5,a5,-780 # 80001040 +80001354: 0007a703 lw a4,0(a5) +80001358: 0047a783 lw a5,4(a5) +8000135c: 00f76733 or a4,a4,a5 +80001360: fe0706e3 beqz a4,8000134c + fromhost = 0; +80001364: 00000797 auipc a5,0x0 +80001368: cdc78793 addi a5,a5,-804 # 80001040 +8000136c: 00000693 li a3,0 +80001370: 00000713 li a4,0 +80001374: 00d7a023 sw a3,0(a5) +80001378: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +8000137c: 0ff0000f fence + return magic_mem[0]; +80001380: 00062503 lw a0,0(a2) +80001384: 00462583 lw a1,4(a2) +} +80001388: 08010113 addi sp,sp,128 +8000138c: 00008067 ret + +80001390 : + buf[buflen++] = ch; +80001390: 00022703 lw a4,0(tp) # 0 +80001394: 00170813 addi a6,a4,1 +80001398: 01022023 sw a6,0(tp) # 0 +8000139c: 04020793 addi a5,tp,64 # 40 +800013a0: 00f707b3 add a5,a4,a5 +800013a4: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +800013a8: 00a00793 li a5,10 +800013ac: 00f50a63 beq a0,a5,800013c0 +800013b0: 00400793 li a5,4 +800013b4: 00f80663 beq a6,a5,800013c0 +} +800013b8: 00000513 li a0,0 +800013bc: 00008067 ret +{ +800013c0: ff010113 addi sp,sp,-16 +800013c4: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800013c8: 00080793 mv a5,a6 +800013cc: 41f85813 srai a6,a6,0x1f +800013d0: 04020693 addi a3,tp,64 # 40 +800013d4: 00000713 li a4,0 +800013d8: 00100593 li a1,1 +800013dc: 00000613 li a2,0 +800013e0: 04000513 li a0,64 +800013e4: f11ff0ef jal ra,800012f4 + buflen = 0; +800013e8: 00022023 sw zero,0(tp) # 0 +} +800013ec: 00000513 li a0,0 +800013f0: 00c12083 lw ra,12(sp) +800013f4: 01010113 addi sp,sp,16 +800013f8: 00008067 ret + +800013fc : + READ_CTR(mcycle); +800013fc: b00027f3 csrr a5,mcycle +80001400: 02051263 bnez a0,80001424 +80001404: 00002717 auipc a4,0x2 +80001408: 08470713 addi a4,a4,132 # 80003488 +8000140c: 00072703 lw a4,0(a4) +80001410: 40e787b3 sub a5,a5,a4 +80001414: 00001717 auipc a4,0x1 +80001418: 36c70713 addi a4,a4,876 # 80002780 <__clz_tab+0x100> +8000141c: 00002697 auipc a3,0x2 +80001420: 06e6a223 sw a4,100(a3) # 80003480 +80001424: 00002717 auipc a4,0x2 +80001428: 06f72223 sw a5,100(a4) # 80003488 + READ_CTR(minstret); +8000142c: b02027f3 csrr a5,minstret +80001430: 02051263 bnez a0,80001454 +80001434: 00002717 auipc a4,0x2 +80001438: 05470713 addi a4,a4,84 # 80003488 +8000143c: 00472703 lw a4,4(a4) +80001440: 40e787b3 sub a5,a5,a4 +80001444: 00001717 auipc a4,0x1 +80001448: 34470713 addi a4,a4,836 # 80002788 <__clz_tab+0x108> +8000144c: 00002697 auipc a3,0x2 +80001450: 02e6ac23 sw a4,56(a3) # 80003484 +80001454: 00002717 auipc a4,0x2 +80001458: 02f72c23 sw a5,56(a4) # 8000348c +} +8000145c: 00008067 ret + +80001460 : + tohost = (code << 1) | 1; +80001460: 00151513 slli a0,a0,0x1 +80001464: 00156713 ori a4,a0,1 +80001468: 00000793 li a5,0 +8000146c: 00000697 auipc a3,0x0 +80001470: b9468693 addi a3,a3,-1132 # 80001000 +80001474: 00e6a023 sw a4,0(a3) +80001478: 00f6a223 sw a5,4(a3) +8000147c: 0000006f j 8000147c + +80001480 : +{ +80001480: ff010113 addi sp,sp,-16 +80001484: 00112623 sw ra,12(sp) + tohost_exit(1337); +80001488: 53900513 li a0,1337 +8000148c: fd5ff0ef jal ra,80001460 + +80001490 : +{ +80001490: ff010113 addi sp,sp,-16 +80001494: 00112623 sw ra,12(sp) + tohost_exit(code); +80001498: fc9ff0ef jal ra,80001460 + +8000149c : +{ +8000149c: ff010113 addi sp,sp,-16 +800014a0: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +800014a4: 08600513 li a0,134 +800014a8: fe9ff0ef jal ra,80001490 + +800014ac : + while (cid != 0); +800014ac: 00051063 bnez a0,800014ac +} +800014b0: 00008067 ret + +800014b4 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +800014b4: 00b567b3 or a5,a0,a1 +800014b8: 00c7e7b3 or a5,a5,a2 +800014bc: 0037f793 andi a5,a5,3 +800014c0: 02078463 beqz a5,800014e8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +800014c4: 00050793 mv a5,a0 +800014c8: 0380006f j 80001500 + *d++ = *s++; +800014cc: 0005a703 lw a4,0(a1) +800014d0: 00e7a023 sw a4,0(a5) +800014d4: 00478793 addi a5,a5,4 +800014d8: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +800014dc: 00c50733 add a4,a0,a2 +800014e0: fee7e6e3 bltu a5,a4,800014cc +800014e4: 00008067 ret + uintptr_t *d = dest; +800014e8: 00050793 mv a5,a0 +800014ec: ff1ff06f j 800014dc + while (d < (char*)(dest + len)) + *d++ = *s++; +800014f0: 0005c703 lbu a4,0(a1) +800014f4: 00e78023 sb a4,0(a5) +800014f8: 00178793 addi a5,a5,1 +800014fc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +80001500: 00c50733 add a4,a0,a2 +80001504: fee7e6e3 bltu a5,a4,800014f0 + } + return dest; +} +80001508: 00008067 ret + +8000150c : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +8000150c: 00c567b3 or a5,a0,a2 +80001510: 0037f793 andi a5,a5,3 +80001514: 04079463 bnez a5,8000155c + uintptr_t word = byte & 0xFF; +80001518: 0ff5f593 andi a1,a1,255 + word |= word << 8; +8000151c: 00859793 slli a5,a1,0x8 +80001520: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +80001524: 01079593 slli a1,a5,0x10 +80001528: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +8000152c: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +80001530: 00c0006f j 8000153c + *d++ = word; +80001534: 00b7a023 sw a1,0(a5) +80001538: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +8000153c: 00c50733 add a4,a0,a2 +80001540: fee7eae3 bltu a5,a4,80001534 +80001544: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80001548: 00b78023 sb a1,0(a5) +8000154c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80001550: 00c50733 add a4,a0,a2 +80001554: fee7eae3 bltu a5,a4,80001548 + } + return dest; +} +80001558: 00008067 ret + char *d = dest; +8000155c: 00050793 mv a5,a0 +80001560: ff1ff06f j 80001550 + +80001564 : +{ +80001564: ff010113 addi sp,sp,-16 +80001568: 00112623 sw ra,12(sp) +8000156c: 00812423 sw s0,8(sp) +80001570: 00912223 sw s1,4(sp) +80001574: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80001578: 00002497 auipc s1,0x2 +8000157c: f1848493 addi s1,s1,-232 # 80003490 <_tdata_begin> +80001580: 00002597 auipc a1,0x2 +80001584: f1058593 addi a1,a1,-240 # 80003490 <_tdata_begin> +80001588: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +8000158c: 00020913 mv s2,tp +80001590: 00040613 mv a2,s0 +80001594: 00020513 mv a0,tp +80001598: f1dff0ef jal ra,800014b4 + memset(thread_pointer + tdata_size, 0, tbss_size); +8000159c: 88818613 addi a2,gp,-1912 # 80003504 <_tbss_end> +800015a0: 40960633 sub a2,a2,s1 +800015a4: 00000593 li a1,0 +800015a8: 00890533 add a0,s2,s0 +800015ac: f61ff0ef jal ra,8000150c +} +800015b0: 00c12083 lw ra,12(sp) +800015b4: 00812403 lw s0,8(sp) +800015b8: 00412483 lw s1,4(sp) +800015bc: 00012903 lw s2,0(sp) +800015c0: 01010113 addi sp,sp,16 +800015c4: 00008067 ret + +800015c8 : + +size_t strlen(const char *s) +{ + const char *p = s; +800015c8: 00050793 mv a5,a0 + while (*p) +800015cc: 0080006f j 800015d4 + p++; +800015d0: 00178793 addi a5,a5,1 + while (*p) +800015d4: 0007c703 lbu a4,0(a5) +800015d8: fe071ce3 bnez a4,800015d0 + return p - s; +} +800015dc: 40a78533 sub a0,a5,a0 +800015e0: 00008067 ret + +800015e4 : +{ +800015e4: ff010113 addi sp,sp,-16 +800015e8: 00112623 sw ra,12(sp) +800015ec: 00812423 sw s0,8(sp) +800015f0: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800015f4: fd5ff0ef jal ra,800015c8 +800015f8: 00050793 mv a5,a0 +800015fc: 00000813 li a6,0 +80001600: 00040693 mv a3,s0 +80001604: 00000713 li a4,0 +80001608: 00100593 li a1,1 +8000160c: 00000613 li a2,0 +80001610: 04000513 li a0,64 +80001614: ce1ff0ef jal ra,800012f4 +} +80001618: 00c12083 lw ra,12(sp) +8000161c: 00812403 lw s0,8(sp) +80001620: 01010113 addi sp,sp,16 +80001624: 00008067 ret +{ +80001628: ff010113 addi sp,sp,-16 +8000162c: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +80001630: 00001517 auipc a0,0x1 +80001634: 16450513 addi a0,a0,356 # 80002794 <__clz_tab+0x114> +80001638: fadff0ef jal ra,800015e4 +} +8000163c: fff00513 li a0,-1 +80001640: 00c12083 lw ra,12(sp) +80001644: 01010113 addi sp,sp,16 +80001648: 00008067 ret + +8000164c : +{ +8000164c: fd010113 addi sp,sp,-48 +80001650: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +80001654: 00000713 li a4,0 +80001658: 0340006f j 8000168c + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000165c: 05700613 li a2,87 +80001660: 00f00793 li a5,15 +80001664: 40e787b3 sub a5,a5,a4 +80001668: 00c686b3 add a3,a3,a2 +8000166c: 02010613 addi a2,sp,32 +80001670: 00f607b3 add a5,a2,a5 +80001674: fed78623 sb a3,-20(a5) + x >>= 4; +80001678: 01c59793 slli a5,a1,0x1c +8000167c: 00455513 srli a0,a0,0x4 +80001680: 00a7e533 or a0,a5,a0 +80001684: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80001688: 00170713 addi a4,a4,1 +8000168c: 00f00793 li a5,15 +80001690: 00e7cc63 blt a5,a4,800016a8 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80001694: 00f57693 andi a3,a0,15 +80001698: 00900613 li a2,9 +8000169c: fcd660e3 bltu a2,a3,8000165c +800016a0: 03000613 li a2,48 +800016a4: fbdff06f j 80001660 + str[16] = 0; +800016a8: 00010e23 sb zero,28(sp) + printstr(str); +800016ac: 00c10513 addi a0,sp,12 +800016b0: f35ff0ef jal ra,800015e4 +} +800016b4: 02c12083 lw ra,44(sp) +800016b8: 03010113 addi sp,sp,48 +800016bc: 00008067 ret + +800016c0 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +800016c0: 00050793 mv a5,a0 + while (n-- && *p) +800016c4: 00c0006f j 800016d0 + p++; +800016c8: 00178793 addi a5,a5,1 + while (n-- && *p) +800016cc: 00070593 mv a1,a4 +800016d0: fff58713 addi a4,a1,-1 +800016d4: 00058663 beqz a1,800016e0 +800016d8: 0007c683 lbu a3,0(a5) +800016dc: fe0696e3 bnez a3,800016c8 + return p - s; +} +800016e0: 40a78533 sub a0,a5,a0 +800016e4: 00008067 ret + +800016e8 : +{ +800016e8: ec010113 addi sp,sp,-320 +800016ec: 12112e23 sw ra,316(sp) +800016f0: 12812c23 sw s0,312(sp) +800016f4: 12912a23 sw s1,308(sp) +800016f8: 13212823 sw s2,304(sp) +800016fc: 13312623 sw s3,300(sp) +80001700: 13412423 sw s4,296(sp) +80001704: 13512223 sw s5,292(sp) +80001708: 13612023 sw s6,288(sp) +8000170c: 11712e23 sw s7,284(sp) +80001710: 11812c23 sw s8,280(sp) +80001714: 11912a23 sw s9,276(sp) +80001718: 11a12823 sw s10,272(sp) +8000171c: 00050993 mv s3,a0 +80001720: 00058913 mv s2,a1 +80001724: 00060413 mv s0,a2 +80001728: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +8000172c: 00044503 lbu a0,0(s0) +80001730: 02500793 li a5,37 +80001734: 00f50c63 beq a0,a5,8000174c + if (ch == '\0') +80001738: 30050c63 beqz a0,80001a50 + fmt++; +8000173c: 00140413 addi s0,s0,1 + putch(ch, putdat); +80001740: 00090593 mv a1,s2 +80001744: 000980e7 jalr s3 +80001748: fe5ff06f j 8000172c + fmt++; +8000174c: 00140a13 addi s4,s0,1 +80001750: 000a0793 mv a5,s4 + padc = ' '; +80001754: 02000c93 li s9,32 + precision = -1; +80001758: fff00493 li s1,-1 + width = -1; +8000175c: fff00b93 li s7,-1 + lflag = 0; +80001760: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +80001764: 00178413 addi s0,a5,1 +80001768: 0007c503 lbu a0,0(a5) +8000176c: fdd50793 addi a5,a0,-35 +80001770: 0ff7f693 andi a3,a5,255 +80001774: 05500713 li a4,85 +80001778: 2cd76263 bltu a4,a3,80001a3c +8000177c: 00269793 slli a5,a3,0x2 +80001780: 00001717 auipc a4,0x1 +80001784: da870713 addi a4,a4,-600 # 80002528 <__umoddi3+0x410> +80001788: 00e787b3 add a5,a5,a4 +8000178c: 0007a783 lw a5,0(a5) +80001790: 00e787b3 add a5,a5,a4 +80001794: 00078067 jr a5 +80001798: 00040793 mv a5,s0 + padc = '-'; +8000179c: 02d00c93 li s9,45 +800017a0: fc5ff06f j 80001764 + switch (ch = *(unsigned char *) fmt++) { +800017a4: 00040793 mv a5,s0 + padc = '0'; +800017a8: 03000c93 li s9,48 +800017ac: fb9ff06f j 80001764 + switch (ch = *(unsigned char *) fmt++) { +800017b0: 00040793 mv a5,s0 + width = 0; +800017b4: 00000b93 li s7,0 +800017b8: fadff06f j 80001764 + base = 10; +800017bc: 00a00c13 li s8,10 +800017c0: 1a40006f j 80001964 + for (precision = 0; ; ++fmt) { +800017c4: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +800017c8: 00249793 slli a5,s1,0x2 +800017cc: 009784b3 add s1,a5,s1 +800017d0: 00149793 slli a5,s1,0x1 +800017d4: 00a78533 add a0,a5,a0 +800017d8: fd050493 addi s1,a0,-48 + ch = *fmt; +800017dc: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +800017e0: fd050713 addi a4,a0,-48 +800017e4: 00900793 li a5,9 +800017e8: 04e7e263 bltu a5,a4,8000182c + for (precision = 0; ; ++fmt) { +800017ec: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800017f0: fd9ff06f j 800017c8 + precision = va_arg(ap, int); +800017f4: 00c12783 lw a5,12(sp) +800017f8: 00478713 addi a4,a5,4 +800017fc: 00e12623 sw a4,12(sp) +80001800: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +80001804: 00040793 mv a5,s0 + if (width < 0) +80001808: f40bdee3 bgez s7,80001764 + width = precision, precision = -1; +8000180c: 00048b93 mv s7,s1 +80001810: fff00493 li s1,-1 +80001814: f51ff06f j 80001764 + if (width < 0) +80001818: f80bcce3 bltz s7,800017b0 + switch (ch = *(unsigned char *) fmt++) { +8000181c: 00040793 mv a5,s0 +80001820: f45ff06f j 80001764 +80001824: 00040793 mv a5,s0 + goto reswitch; +80001828: f3dff06f j 80001764 +8000182c: 00040793 mv a5,s0 +80001830: fd9ff06f j 80001808 + lflag++; +80001834: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +80001838: 00040793 mv a5,s0 + goto reswitch; +8000183c: f29ff06f j 80001764 + putch(va_arg(ap, int), putdat); +80001840: 00c12783 lw a5,12(sp) +80001844: 00478713 addi a4,a5,4 +80001848: 00e12623 sw a4,12(sp) +8000184c: 00090593 mv a1,s2 +80001850: 0007a503 lw a0,0(a5) +80001854: 000980e7 jalr s3 + break; +80001858: ed5ff06f j 8000172c + if ((p = va_arg(ap, char *)) == NULL) +8000185c: 00c12783 lw a5,12(sp) +80001860: 00478713 addi a4,a5,4 +80001864: 00e12623 sw a4,12(sp) +80001868: 0007aa03 lw s4,0(a5) +8000186c: 020a0263 beqz s4,80001890 + if (width > 0 && padc != '-') +80001870: 05705a63 blez s7,800018c4 +80001874: 02d00793 li a5,45 +80001878: 04fc8663 beq s9,a5,800018c4 + for (width -= strnlen(p, precision); width > 0; width--) +8000187c: 00048593 mv a1,s1 +80001880: 000a0513 mv a0,s4 +80001884: e3dff0ef jal ra,800016c0 +80001888: 40ab8bb3 sub s7,s7,a0 +8000188c: 0200006f j 800018ac + p = "(null)"; +80001890: 00001a17 auipc s4,0x1 +80001894: f1ca0a13 addi s4,s4,-228 # 800027ac <__clz_tab+0x12c> +80001898: fd9ff06f j 80001870 + putch(padc, putdat); +8000189c: 00090593 mv a1,s2 +800018a0: 000c8513 mv a0,s9 +800018a4: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +800018a8: fffb8b93 addi s7,s7,-1 +800018ac: ff7048e3 bgtz s7,8000189c +800018b0: 0140006f j 800018c4 + putch(ch, putdat); +800018b4: 00090593 mv a1,s2 +800018b8: 000980e7 jalr s3 + p++; +800018bc: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +800018c0: fffb8b93 addi s7,s7,-1 +800018c4: 000a4503 lbu a0,0(s4) +800018c8: 00050863 beqz a0,800018d8 +800018cc: fe04c4e3 bltz s1,800018b4 +800018d0: fff48493 addi s1,s1,-1 +800018d4: fe04d0e3 bgez s1,800018b4 + for (; width > 0; width--) +800018d8: e5705ae3 blez s7,8000172c + putch(' ', putdat); +800018dc: 00090593 mv a1,s2 +800018e0: 02000513 li a0,32 +800018e4: 000980e7 jalr s3 + for (; width > 0; width--) +800018e8: fffb8b93 addi s7,s7,-1 +800018ec: fedff06f j 800018d8 + num = getint(&ap, lflag); +800018f0: 00c10513 addi a0,sp,12 +800018f4: 98dff0ef jal ra,80001280 +800018f8: 00050493 mv s1,a0 +800018fc: 00058a13 mv s4,a1 +80001900: 00050b13 mv s6,a0 +80001904: 00058a93 mv s5,a1 + if ((long long) num < 0) { +80001908: 0c05d063 bgez a1,800019c8 + putch('-', putdat); +8000190c: 00090593 mv a1,s2 +80001910: 02d00513 li a0,45 +80001914: 000980e7 jalr s3 + num = -(long long) num; +80001918: 00000793 li a5,0 +8000191c: 40978b33 sub s6,a5,s1 +80001920: 01603ab3 snez s5,s6 +80001924: 414787b3 sub a5,a5,s4 +80001928: 41578ab3 sub s5,a5,s5 + base = 10; +8000192c: 00a00c13 li s8,10 +80001930: 0440006f j 80001974 + base = 8; +80001934: 00800c13 li s8,8 + goto unsigned_number; +80001938: 02c0006f j 80001964 + putch('0', putdat); +8000193c: 00090593 mv a1,s2 +80001940: 03000513 li a0,48 +80001944: 000980e7 jalr s3 + putch('x', putdat); +80001948: 00090593 mv a1,s2 +8000194c: 07800513 li a0,120 +80001950: 000980e7 jalr s3 + lflag = 1; +80001954: 00100593 li a1,1 + base = 16; +80001958: 01000c13 li s8,16 +8000195c: 0080006f j 80001964 +80001960: 01000c13 li s8,16 + num = getuint(&ap, lflag); +80001964: 00c10513 addi a0,sp,12 +80001968: 8bdff0ef jal ra,80001224 +8000196c: 00050b13 mv s6,a0 +80001970: 00058a93 mv s5,a1 + int pos = 0; +80001974: 00000493 li s1,0 + digs[pos++] = num % base; +80001978: 000c0613 mv a2,s8 +8000197c: 00000693 li a3,0 +80001980: 000b0513 mv a0,s6 +80001984: 000a8593 mv a1,s5 +80001988: 790000ef jal ra,80002118 <__umoddi3> +8000198c: 00148a13 addi s4,s1,1 +80001990: 00249493 slli s1,s1,0x2 +80001994: 11010793 addi a5,sp,272 +80001998: 009784b3 add s1,a5,s1 +8000199c: f0a4a023 sw a0,-256(s1) + if (num < base) +800019a0: 020a8863 beqz s5,800019d0 + num /= base; +800019a4: 000c0613 mv a2,s8 +800019a8: 00000693 li a3,0 +800019ac: 000b0513 mv a0,s6 +800019b0: 000a8593 mv a1,s5 +800019b4: 330000ef jal ra,80001ce4 <__udivdi3> +800019b8: 00050b13 mv s6,a0 +800019bc: 00058a93 mv s5,a1 + digs[pos++] = num % base; +800019c0: 000a0493 mv s1,s4 +800019c4: fb5ff06f j 80001978 + base = 10; +800019c8: 00a00c13 li s8,10 +800019cc: fa9ff06f j 80001974 + if (num < base) +800019d0: fd8b7ae3 bleu s8,s6,800019a4 +800019d4: 0140006f j 800019e8 + putch(padc, putdat); +800019d8: 00090593 mv a1,s2 +800019dc: 000c8513 mv a0,s9 +800019e0: 000980e7 jalr s3 + while (width-- > pos) +800019e4: 00048b93 mv s7,s1 +800019e8: fffb8493 addi s1,s7,-1 +800019ec: ff7a46e3 blt s4,s7,800019d8 +800019f0: 0180006f j 80001a08 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800019f4: 03000513 li a0,48 +800019f8: 00090593 mv a1,s2 +800019fc: 00a78533 add a0,a5,a0 +80001a00: 000980e7 jalr s3 + while (pos-- > 0) +80001a04: 00048a13 mv s4,s1 +80001a08: fffa0493 addi s1,s4,-1 +80001a0c: d34050e3 blez s4,8000172c + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +80001a10: 00249793 slli a5,s1,0x2 +80001a14: 11010713 addi a4,sp,272 +80001a18: 00f707b3 add a5,a4,a5 +80001a1c: f007a783 lw a5,-256(a5) +80001a20: 00900713 li a4,9 +80001a24: fcf778e3 bleu a5,a4,800019f4 +80001a28: 05700513 li a0,87 +80001a2c: fcdff06f j 800019f8 + putch(ch, putdat); +80001a30: 00090593 mv a1,s2 +80001a34: 000980e7 jalr s3 + break; +80001a38: cf5ff06f j 8000172c + putch('%', putdat); +80001a3c: 00090593 mv a1,s2 +80001a40: 02500513 li a0,37 +80001a44: 000980e7 jalr s3 + fmt = last_fmt; +80001a48: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80001a4c: ce1ff06f j 8000172c +} +80001a50: 13c12083 lw ra,316(sp) +80001a54: 13812403 lw s0,312(sp) +80001a58: 13412483 lw s1,308(sp) +80001a5c: 13012903 lw s2,304(sp) +80001a60: 12c12983 lw s3,300(sp) +80001a64: 12812a03 lw s4,296(sp) +80001a68: 12412a83 lw s5,292(sp) +80001a6c: 12012b03 lw s6,288(sp) +80001a70: 11c12b83 lw s7,284(sp) +80001a74: 11812c03 lw s8,280(sp) +80001a78: 11412c83 lw s9,276(sp) +80001a7c: 11012d03 lw s10,272(sp) +80001a80: 14010113 addi sp,sp,320 +80001a84: 00008067 ret + +80001a88 : +{ +80001a88: fc010113 addi sp,sp,-64 +80001a8c: 00112e23 sw ra,28(sp) +80001a90: 02b12223 sw a1,36(sp) +80001a94: 02c12423 sw a2,40(sp) +80001a98: 02d12623 sw a3,44(sp) +80001a9c: 02e12823 sw a4,48(sp) +80001aa0: 02f12a23 sw a5,52(sp) +80001aa4: 03012c23 sw a6,56(sp) +80001aa8: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80001aac: 02410693 addi a3,sp,36 +80001ab0: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +80001ab4: 00050613 mv a2,a0 +80001ab8: 00000593 li a1,0 +80001abc: 00000517 auipc a0,0x0 +80001ac0: 8d450513 addi a0,a0,-1836 # 80001390 +80001ac4: c25ff0ef jal ra,800016e8 +} +80001ac8: 00000513 li a0,0 +80001acc: 01c12083 lw ra,28(sp) +80001ad0: 04010113 addi sp,sp,64 +80001ad4: 00008067 ret + +80001ad8 : +{ +80001ad8: fb010113 addi sp,sp,-80 +80001adc: 02112623 sw ra,44(sp) +80001ae0: 02812423 sw s0,40(sp) +80001ae4: 00a12623 sw a0,12(sp) +80001ae8: 02c12c23 sw a2,56(sp) +80001aec: 02d12e23 sw a3,60(sp) +80001af0: 04e12023 sw a4,64(sp) +80001af4: 04f12223 sw a5,68(sp) +80001af8: 05012423 sw a6,72(sp) +80001afc: 05112623 sw a7,76(sp) + char* str0 = str; +80001b00: 00050413 mv s0,a0 + va_start(ap, fmt); +80001b04: 03810693 addi a3,sp,56 +80001b08: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +80001b0c: 00058613 mv a2,a1 +80001b10: 00c10593 addi a1,sp,12 +80001b14: fffff517 auipc a0,0xfffff +80001b18: 7c850513 addi a0,a0,1992 # 800012dc +80001b1c: bcdff0ef jal ra,800016e8 + *str = 0; +80001b20: 00c12783 lw a5,12(sp) +80001b24: 00078023 sb zero,0(a5) +} +80001b28: 00c12503 lw a0,12(sp) +80001b2c: 40850533 sub a0,a0,s0 +80001b30: 02c12083 lw ra,44(sp) +80001b34: 02812403 lw s0,40(sp) +80001b38: 05010113 addi sp,sp,80 +80001b3c: 00008067 ret + +80001b40 <_init>: +{ +80001b40: f6010113 addi sp,sp,-160 +80001b44: 08112e23 sw ra,156(sp) +80001b48: 08812c23 sw s0,152(sp) +80001b4c: 08912a23 sw s1,148(sp) +80001b50: 09212823 sw s2,144(sp) +80001b54: 09312623 sw s3,140(sp) +80001b58: 00050413 mv s0,a0 +80001b5c: 00058913 mv s2,a1 +80001b60: 03f10493 addi s1,sp,63 +80001b64: fc04f493 andi s1,s1,-64 + init_tls(); +80001b68: 9fdff0ef jal ra,80001564 + thread_entry(cid, nc); +80001b6c: 00090593 mv a1,s2 +80001b70: 00040513 mv a0,s0 +80001b74: 939ff0ef jal ra,800014ac + int ret = main(0, 0); +80001b78: 00000593 li a1,0 +80001b7c: 00000513 li a0,0 +80001b80: e24ff0ef jal ra,800011a4
+80001b84: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80001b88: 00000413 li s0,0 + char* pbuf = buf; +80001b8c: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80001b90: 0080006f j 80001b98 <_init+0x58> +80001b94: 00140413 addi s0,s0,1 +80001b98: 00100793 li a5,1 +80001b9c: 0487c263 blt a5,s0,80001be0 <_init+0xa0> + if (counters[i]) +80001ba0: 00241713 slli a4,s0,0x2 +80001ba4: 00002797 auipc a5,0x2 +80001ba8: 8e478793 addi a5,a5,-1820 # 80003488 +80001bac: 00e787b3 add a5,a5,a4 +80001bb0: 0007a683 lw a3,0(a5) +80001bb4: fe0680e3 beqz a3,80001b94 <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +80001bb8: 00002797 auipc a5,0x2 +80001bbc: 8c878793 addi a5,a5,-1848 # 80003480 +80001bc0: 00e787b3 add a5,a5,a4 +80001bc4: 0007a603 lw a2,0(a5) +80001bc8: 00001597 auipc a1,0x1 +80001bcc: bec58593 addi a1,a1,-1044 # 800027b4 <__clz_tab+0x134> +80001bd0: 00090513 mv a0,s2 +80001bd4: f05ff0ef jal ra,80001ad8 +80001bd8: 00a90933 add s2,s2,a0 +80001bdc: fb9ff06f j 80001b94 <_init+0x54> + if (pbuf != buf) +80001be0: 01248663 beq s1,s2,80001bec <_init+0xac> + printstr(buf); +80001be4: 00048513 mv a0,s1 +80001be8: 9fdff0ef jal ra,800015e4 + exit(ret); +80001bec: 00098513 mv a0,s3 +80001bf0: 8a1ff0ef jal ra,80001490 + +80001bf4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +80001bf4: 00150613 addi a2,a0,1 +80001bf8: 00054783 lbu a5,0(a0) + c2 = *s2++; +80001bfc: 00158693 addi a3,a1,1 +80001c00: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +80001c04: 00078863 beqz a5,80001c14 + c1 = *s1++; +80001c08: 00060513 mv a0,a2 + c2 = *s2++; +80001c0c: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +80001c10: fee782e3 beq a5,a4,80001bf4 + + return c1 - c2; +} +80001c14: 40e78533 sub a0,a5,a4 +80001c18: 00008067 ret + +80001c1c : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +80001c1c: 00050793 mv a5,a0 + while ((*d++ = *src++)) +80001c20: 0005c703 lbu a4,0(a1) +80001c24: 00e78023 sb a4,0(a5) +80001c28: 00158593 addi a1,a1,1 +80001c2c: 00178793 addi a5,a5,1 +80001c30: fe0718e3 bnez a4,80001c20 + ; + return dest; +} +80001c34: 00008067 ret + +80001c38 : + +long atol(const char* str) +{ +80001c38: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +80001c3c: 0080006f j 80001c44 + str++; +80001c40: 00178793 addi a5,a5,1 + while (*str == ' ') +80001c44: 0007c703 lbu a4,0(a5) +80001c48: 02000693 li a3,32 +80001c4c: fed70ae3 beq a4,a3,80001c40 + + if (*str == '-' || *str == '+') { +80001c50: 02d00693 li a3,45 +80001c54: 00d70a63 beq a4,a3,80001c68 +80001c58: 02b00693 li a3,43 +80001c5c: 00d70663 beq a4,a3,80001c68 + int sign = 0; +80001c60: 00000613 li a2,0 +80001c64: 0100006f j 80001c74 + sign = *str == '-'; +80001c68: fd370713 addi a4,a4,-45 +80001c6c: 00173613 seqz a2,a4 + str++; +80001c70: 00178793 addi a5,a5,1 + int sign = 0; +80001c74: 00000513 li a0,0 +80001c78: 01c0006f j 80001c94 + } + + while (*str) { + res *= 10; +80001c7c: 00251693 slli a3,a0,0x2 +80001c80: 00a686b3 add a3,a3,a0 +80001c84: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80001c88: 00178793 addi a5,a5,1 +80001c8c: fd070713 addi a4,a4,-48 +80001c90: 00e50533 add a0,a0,a4 + while (*str) { +80001c94: 0007c703 lbu a4,0(a5) +80001c98: fe0712e3 bnez a4,80001c7c + } + + return sign ? -res : res; +80001c9c: 00060463 beqz a2,80001ca4 +80001ca0: 40a00533 neg a0,a0 +} +80001ca4: 00008067 ret + +80001ca8 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80001ca8: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80001cac: 00001717 auipc a4,0x1 +80001cb0: 7d070713 addi a4,a4,2000 # 8000347c +80001cb4: 00072703 lw a4,0(a4) +80001cb8: 00070e63 beqz a4,80001cd4 <_sbrk+0x2c> + heap_end = & _end; + + prev_heap_end = heap_end; +80001cbc: 00001717 auipc a4,0x1 +80001cc0: 7c070713 addi a4,a4,1984 # 8000347c +80001cc4: 00072503 lw a0,0(a4) + heap_end += incr; +80001cc8: 00f507b3 add a5,a0,a5 +80001ccc: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80001cd0: 00008067 ret + heap_end = & _end; +80001cd4: 84418713 addi a4,gp,-1980 # 800034c0 <_end> +80001cd8: 00001697 auipc a3,0x1 +80001cdc: 7ae6a223 sw a4,1956(a3) # 8000347c +80001ce0: fddff06f j 80001cbc <_sbrk+0x14> + +80001ce4 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80001ce4: 00058793 mv a5,a1 + d0 = dd.s.low; +80001ce8: 00060813 mv a6,a2 + d1 = dd.s.high; +80001cec: 00068893 mv a7,a3 + n0 = nn.s.low; +80001cf0: 00050313 mv t1,a0 + if (d1 == 0) +80001cf4: 28069663 bnez a3,80001f80 <__udivdi3+0x29c> +80001cf8: 80002737 lui a4,0x80002 +80001cfc: 68070713 addi a4,a4,1664 # 80002680 + if (d0 > n1) +80001d00: 0ec5f663 bleu a2,a1,80001dec <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80001d04: 000106b7 lui a3,0x10 +80001d08: 0cd67863 bleu a3,a2,80001dd8 <__udivdi3+0xf4> +80001d0c: 0ff00693 li a3,255 +80001d10: 00c6b6b3 sltu a3,a3,a2 +80001d14: 00369693 slli a3,a3,0x3 +80001d18: 00d658b3 srl a7,a2,a3 +80001d1c: 01170733 add a4,a4,a7 +80001d20: 00074703 lbu a4,0(a4) +80001d24: 00d706b3 add a3,a4,a3 +80001d28: 02000713 li a4,32 +80001d2c: 40d70733 sub a4,a4,a3 + if (bm != 0) +80001d30: 00070c63 beqz a4,80001d48 <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001d34: 00e797b3 sll a5,a5,a4 +80001d38: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80001d3c: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001d40: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80001d44: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001d48: 01085513 srli a0,a6,0x10 +80001d4c: 02a5d7b3 divu a5,a1,a0 +80001d50: 01081613 slli a2,a6,0x10 +80001d54: 01065613 srli a2,a2,0x10 +80001d58: 01035693 srli a3,t1,0x10 +80001d5c: 02a5f733 remu a4,a1,a0 +80001d60: 02f605b3 mul a1,a2,a5 +80001d64: 01071713 slli a4,a4,0x10 +80001d68: 00d766b3 or a3,a4,a3 +80001d6c: 00078713 mv a4,a5 +80001d70: 00b6fe63 bleu a1,a3,80001d8c <__udivdi3+0xa8> +80001d74: 010686b3 add a3,a3,a6 +80001d78: fff78713 addi a4,a5,-1 +80001d7c: 0106e863 bltu a3,a6,80001d8c <__udivdi3+0xa8> +80001d80: 00b6f663 bleu a1,a3,80001d8c <__udivdi3+0xa8> +80001d84: ffe78713 addi a4,a5,-2 +80001d88: 010686b3 add a3,a3,a6 +80001d8c: 40b686b3 sub a3,a3,a1 +80001d90: 02a6f7b3 remu a5,a3,a0 +80001d94: 01031313 slli t1,t1,0x10 +80001d98: 01035313 srli t1,t1,0x10 +80001d9c: 02a6d6b3 divu a3,a3,a0 +80001da0: 01079793 slli a5,a5,0x10 +80001da4: 0067e333 or t1,a5,t1 +80001da8: 02d605b3 mul a1,a2,a3 +80001dac: 00068513 mv a0,a3 +80001db0: 00b37c63 bleu a1,t1,80001dc8 <__udivdi3+0xe4> +80001db4: 00680333 add t1,a6,t1 +80001db8: fff68513 addi a0,a3,-1 # ffff +80001dbc: 01036663 bltu t1,a6,80001dc8 <__udivdi3+0xe4> +80001dc0: 00b37463 bleu a1,t1,80001dc8 <__udivdi3+0xe4> +80001dc4: ffe68513 addi a0,a3,-2 +80001dc8: 01071713 slli a4,a4,0x10 +80001dcc: 00a76733 or a4,a4,a0 + q1 = 0; +80001dd0: 00000593 li a1,0 +80001dd4: 0e40006f j 80001eb8 <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80001dd8: 010008b7 lui a7,0x1000 +80001ddc: 01000693 li a3,16 +80001de0: f3166ce3 bltu a2,a7,80001d18 <__udivdi3+0x34> +80001de4: 01800693 li a3,24 +80001de8: f31ff06f j 80001d18 <__udivdi3+0x34> + if (d0 == 0) +80001dec: 00061663 bnez a2,80001df8 <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80001df0: 00100693 li a3,1 +80001df4: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +80001df8: 000106b7 lui a3,0x10 +80001dfc: 0cd87263 bleu a3,a6,80001ec0 <__udivdi3+0x1dc> +80001e00: 0ff00693 li a3,255 +80001e04: 0106f463 bleu a6,a3,80001e0c <__udivdi3+0x128> +80001e08: 00800893 li a7,8 +80001e0c: 011856b3 srl a3,a6,a7 +80001e10: 00d70733 add a4,a4,a3 +80001e14: 00074683 lbu a3,0(a4) +80001e18: 02000713 li a4,32 +80001e1c: 011686b3 add a3,a3,a7 +80001e20: 40d70733 sub a4,a4,a3 + if (bm == 0) +80001e24: 0a071863 bnez a4,80001ed4 <__udivdi3+0x1f0> + n1 -= d0; +80001e28: 410787b3 sub a5,a5,a6 + q1 = 1; +80001e2c: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001e30: 01085613 srli a2,a6,0x10 +80001e34: 01081893 slli a7,a6,0x10 +80001e38: 0108d893 srli a7,a7,0x10 +80001e3c: 01035693 srli a3,t1,0x10 +80001e40: 02c7f733 remu a4,a5,a2 +80001e44: 02c7d7b3 divu a5,a5,a2 +80001e48: 01071713 slli a4,a4,0x10 +80001e4c: 00d766b3 or a3,a4,a3 +80001e50: 02f88533 mul a0,a7,a5 +80001e54: 00078713 mv a4,a5 +80001e58: 00a6fe63 bleu a0,a3,80001e74 <__udivdi3+0x190> +80001e5c: 010686b3 add a3,a3,a6 +80001e60: fff78713 addi a4,a5,-1 +80001e64: 0106e863 bltu a3,a6,80001e74 <__udivdi3+0x190> +80001e68: 00a6f663 bleu a0,a3,80001e74 <__udivdi3+0x190> +80001e6c: ffe78713 addi a4,a5,-2 +80001e70: 010686b3 add a3,a3,a6 +80001e74: 40a686b3 sub a3,a3,a0 +80001e78: 02c6f7b3 remu a5,a3,a2 +80001e7c: 01031313 slli t1,t1,0x10 +80001e80: 01035313 srli t1,t1,0x10 +80001e84: 02c6d6b3 divu a3,a3,a2 +80001e88: 01079793 slli a5,a5,0x10 +80001e8c: 0067e333 or t1,a5,t1 +80001e90: 02d888b3 mul a7,a7,a3 +80001e94: 00068513 mv a0,a3 +80001e98: 01137c63 bleu a7,t1,80001eb0 <__udivdi3+0x1cc> +80001e9c: 00680333 add t1,a6,t1 +80001ea0: fff68513 addi a0,a3,-1 # ffff +80001ea4: 01036663 bltu t1,a6,80001eb0 <__udivdi3+0x1cc> +80001ea8: 01137463 bleu a7,t1,80001eb0 <__udivdi3+0x1cc> +80001eac: ffe68513 addi a0,a3,-2 +80001eb0: 01071713 slli a4,a4,0x10 +80001eb4: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +80001eb8: 00070513 mv a0,a4 +80001ebc: 00008067 ret + count_leading_zeros (bm, d0); +80001ec0: 010006b7 lui a3,0x1000 +80001ec4: 01000893 li a7,16 +80001ec8: f4d862e3 bltu a6,a3,80001e0c <__udivdi3+0x128> +80001ecc: 01800893 li a7,24 +80001ed0: f3dff06f j 80001e0c <__udivdi3+0x128> + d0 = d0 << bm; +80001ed4: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +80001ed8: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80001edc: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80001ee0: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001ee4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80001ee8: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001eec: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80001ef0: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001ef4: 01081793 slli a5,a6,0x10 +80001ef8: 0107d793 srli a5,a5,0x10 +80001efc: 0108d613 srli a2,a7,0x10 +80001f00: 02a5d5b3 divu a1,a1,a0 +80001f04: 01071713 slli a4,a4,0x10 +80001f08: 00c76733 or a4,a4,a2 +80001f0c: 02b786b3 mul a3,a5,a1 +80001f10: 00058613 mv a2,a1 +80001f14: 00d77e63 bleu a3,a4,80001f30 <__udivdi3+0x24c> +80001f18: 01070733 add a4,a4,a6 +80001f1c: fff58613 addi a2,a1,-1 +80001f20: 01076863 bltu a4,a6,80001f30 <__udivdi3+0x24c> +80001f24: 00d77663 bleu a3,a4,80001f30 <__udivdi3+0x24c> +80001f28: ffe58613 addi a2,a1,-2 +80001f2c: 01070733 add a4,a4,a6 +80001f30: 40d706b3 sub a3,a4,a3 +80001f34: 02a6f733 remu a4,a3,a0 +80001f38: 01089893 slli a7,a7,0x10 +80001f3c: 0108d893 srli a7,a7,0x10 +80001f40: 02a6d6b3 divu a3,a3,a0 +80001f44: 01071713 slli a4,a4,0x10 +80001f48: 02d785b3 mul a1,a5,a3 +80001f4c: 011767b3 or a5,a4,a7 +80001f50: 00068713 mv a4,a3 +80001f54: 00b7fe63 bleu a1,a5,80001f70 <__udivdi3+0x28c> +80001f58: 010787b3 add a5,a5,a6 +80001f5c: fff68713 addi a4,a3,-1 # ffffff +80001f60: 0107e863 bltu a5,a6,80001f70 <__udivdi3+0x28c> +80001f64: 00b7f663 bleu a1,a5,80001f70 <__udivdi3+0x28c> +80001f68: ffe68713 addi a4,a3,-2 +80001f6c: 010787b3 add a5,a5,a6 +80001f70: 40b787b3 sub a5,a5,a1 +80001f74: 01061593 slli a1,a2,0x10 +80001f78: 00e5e5b3 or a1,a1,a4 +80001f7c: eb5ff06f j 80001e30 <__udivdi3+0x14c> + if (d1 > n1) +80001f80: 18d5e663 bltu a1,a3,8000210c <__udivdi3+0x428> + count_leading_zeros (bm, d1); +80001f84: 00010737 lui a4,0x10 +80001f88: 04e6f463 bleu a4,a3,80001fd0 <__udivdi3+0x2ec> +80001f8c: 0ff00813 li a6,255 +80001f90: 00d83733 sltu a4,a6,a3 +80001f94: 00371713 slli a4,a4,0x3 +80001f98: 80002837 lui a6,0x80002 +80001f9c: 68080813 addi a6,a6,1664 # 80002680 +80001fa0: 00e6d5b3 srl a1,a3,a4 +80001fa4: 010585b3 add a1,a1,a6 +80001fa8: 0005c803 lbu a6,0(a1) +80001fac: 02000593 li a1,32 +80001fb0: 00e80833 add a6,a6,a4 +80001fb4: 410585b3 sub a1,a1,a6 + if (bm == 0) +80001fb8: 02059663 bnez a1,80001fe4 <__udivdi3+0x300> + q0 = 1; +80001fbc: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +80001fc0: eef6ece3 bltu a3,a5,80001eb8 <__udivdi3+0x1d4> +80001fc4: 00c53533 sltu a0,a0,a2 +80001fc8: 00154713 xori a4,a0,1 +80001fcc: eedff06f j 80001eb8 <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +80001fd0: 010005b7 lui a1,0x1000 +80001fd4: 01000713 li a4,16 +80001fd8: fcb6e0e3 bltu a3,a1,80001f98 <__udivdi3+0x2b4> +80001fdc: 01800713 li a4,24 +80001fe0: fb9ff06f j 80001f98 <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80001fe4: 01065733 srl a4,a2,a6 +80001fe8: 00b696b3 sll a3,a3,a1 +80001fec: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001ff0: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80001ff4: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001ff8: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80001ffc: 00b797b3 sll a5,a5,a1 +80002000: 01055833 srl a6,a0,a6 +80002004: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002008: 01069793 slli a5,a3,0x10 +8000200c: 0107d793 srli a5,a5,0x10 +80002010: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80002014: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002018: 03d75733 divu a4,a4,t4 +8000201c: 01089893 slli a7,a7,0x10 +80002020: 0108e833 or a6,a7,a6 +80002024: 02e78f33 mul t5,a5,a4 +80002028: 00070e13 mv t3,a4 +8000202c: 01e87e63 bleu t5,a6,80002048 <__udivdi3+0x364> +80002030: 00d80833 add a6,a6,a3 +80002034: fff70e13 addi t3,a4,-1 # ffff +80002038: 00d86863 bltu a6,a3,80002048 <__udivdi3+0x364> +8000203c: 01e87663 bleu t5,a6,80002048 <__udivdi3+0x364> +80002040: ffe70e13 addi t3,a4,-2 +80002044: 00d80833 add a6,a6,a3 +80002048: 41e80833 sub a6,a6,t5 +8000204c: 03d878b3 remu a7,a6,t4 +80002050: 03d85833 divu a6,a6,t4 +80002054: 01089893 slli a7,a7,0x10 +80002058: 03078eb3 mul t4,a5,a6 +8000205c: 01031793 slli a5,t1,0x10 +80002060: 0107d793 srli a5,a5,0x10 +80002064: 00f8e7b3 or a5,a7,a5 +80002068: 00080713 mv a4,a6 +8000206c: 01d7fe63 bleu t4,a5,80002088 <__udivdi3+0x3a4> +80002070: 00d787b3 add a5,a5,a3 +80002074: fff80713 addi a4,a6,-1 +80002078: 00d7e863 bltu a5,a3,80002088 <__udivdi3+0x3a4> +8000207c: 01d7f663 bleu t4,a5,80002088 <__udivdi3+0x3a4> +80002080: ffe80713 addi a4,a6,-2 +80002084: 00d787b3 add a5,a5,a3 +80002088: 010e1e13 slli t3,t3,0x10 +8000208c: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +80002090: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002094: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +80002098: fffe8813 addi a6,t4,-1 # ffff +8000209c: 01077333 and t1,a4,a6 +800020a0: 01075893 srli a7,a4,0x10 +800020a4: 01067833 and a6,a2,a6 +800020a8: 01065613 srli a2,a2,0x10 +800020ac: 03030e33 mul t3,t1,a6 +800020b0: 03088833 mul a6,a7,a6 +800020b4: 010e5693 srli a3,t3,0x10 +800020b8: 02c30333 mul t1,t1,a2 +800020bc: 01030333 add t1,t1,a6 +800020c0: 006686b3 add a3,a3,t1 +800020c4: 02c888b3 mul a7,a7,a2 +800020c8: 0106f463 bleu a6,a3,800020d0 <__udivdi3+0x3ec> +800020cc: 01d888b3 add a7,a7,t4 +800020d0: 0106d613 srli a2,a3,0x10 +800020d4: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800020d8: 0317e663 bltu a5,a7,80002104 <__udivdi3+0x420> +800020dc: cf179ae3 bne a5,a7,80001dd0 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +800020e0: 000107b7 lui a5,0x10 +800020e4: fff78793 addi a5,a5,-1 # ffff +800020e8: 00f6f6b3 and a3,a3,a5 +800020ec: 01069693 slli a3,a3,0x10 +800020f0: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +800020f4: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +800020f8: 01c686b3 add a3,a3,t3 + q1 = 0; +800020fc: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80002100: dad57ce3 bleu a3,a0,80001eb8 <__udivdi3+0x1d4> + q0--; +80002104: fff70713 addi a4,a4,-1 +80002108: cc9ff06f j 80001dd0 <__udivdi3+0xec> + q1 = 0; +8000210c: 00000593 li a1,0 + q0 = 0; +80002110: 00000713 li a4,0 +80002114: da5ff06f j 80001eb8 <__udivdi3+0x1d4> + +80002118 <__umoddi3>: + d0 = dd.s.low; +80002118: 00060893 mv a7,a2 + d1 = dd.s.high; +8000211c: 00068713 mv a4,a3 + n0 = nn.s.low; +80002120: 00050793 mv a5,a0 + n1 = nn.s.high; +80002124: 00058813 mv a6,a1 + if (d1 == 0) +80002128: 22069c63 bnez a3,80002360 <__umoddi3+0x248> +8000212c: 800026b7 lui a3,0x80002 +80002130: 68068693 addi a3,a3,1664 # 80002680 + if (d0 > n1) +80002134: 0cc5fc63 bleu a2,a1,8000220c <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +80002138: 00010337 lui t1,0x10 +8000213c: 0a667e63 bleu t1,a2,800021f8 <__umoddi3+0xe0> +80002140: 0ff00313 li t1,255 +80002144: 00c37463 bleu a2,t1,8000214c <__umoddi3+0x34> +80002148: 00800713 li a4,8 +8000214c: 00e65333 srl t1,a2,a4 +80002150: 006686b3 add a3,a3,t1 +80002154: 0006ce03 lbu t3,0(a3) +80002158: 02000313 li t1,32 +8000215c: 00ee0e33 add t3,t3,a4 +80002160: 41c30333 sub t1,t1,t3 + if (bm != 0) +80002164: 00030c63 beqz t1,8000217c <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80002168: 006595b3 sll a1,a1,t1 +8000216c: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80002170: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80002174: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +80002178: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +8000217c: 0108d613 srli a2,a7,0x10 +80002180: 02c87733 remu a4,a6,a2 +80002184: 01089513 slli a0,a7,0x10 +80002188: 01055513 srli a0,a0,0x10 +8000218c: 0107d693 srli a3,a5,0x10 +80002190: 02c85833 divu a6,a6,a2 +80002194: 01071713 slli a4,a4,0x10 +80002198: 00d766b3 or a3,a4,a3 +8000219c: 03050833 mul a6,a0,a6 +800021a0: 0106fa63 bleu a6,a3,800021b4 <__umoddi3+0x9c> +800021a4: 011686b3 add a3,a3,a7 +800021a8: 0116e663 bltu a3,a7,800021b4 <__umoddi3+0x9c> +800021ac: 0106f463 bleu a6,a3,800021b4 <__umoddi3+0x9c> +800021b0: 011686b3 add a3,a3,a7 +800021b4: 410686b3 sub a3,a3,a6 +800021b8: 02c6f733 remu a4,a3,a2 +800021bc: 01079793 slli a5,a5,0x10 +800021c0: 0107d793 srli a5,a5,0x10 +800021c4: 02c6d6b3 divu a3,a3,a2 +800021c8: 02d506b3 mul a3,a0,a3 +800021cc: 01071513 slli a0,a4,0x10 +800021d0: 00f567b3 or a5,a0,a5 +800021d4: 00d7fa63 bleu a3,a5,800021e8 <__umoddi3+0xd0> +800021d8: 011787b3 add a5,a5,a7 +800021dc: 0117e663 bltu a5,a7,800021e8 <__umoddi3+0xd0> +800021e0: 00d7f463 bleu a3,a5,800021e8 <__umoddi3+0xd0> +800021e4: 011787b3 add a5,a5,a7 +800021e8: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +800021ec: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +800021f0: 00000593 li a1,0 +} +800021f4: 00008067 ret + count_leading_zeros (bm, d0); +800021f8: 01000337 lui t1,0x1000 +800021fc: 01000713 li a4,16 +80002200: f46666e3 bltu a2,t1,8000214c <__umoddi3+0x34> +80002204: 01800713 li a4,24 +80002208: f45ff06f j 8000214c <__umoddi3+0x34> + if (d0 == 0) +8000220c: 00061663 bnez a2,80002218 <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80002210: 00100613 li a2,1 +80002214: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +80002218: 00010637 lui a2,0x10 +8000221c: 0ac8f263 bleu a2,a7,800022c0 <__umoddi3+0x1a8> +80002220: 0ff00613 li a2,255 +80002224: 01167463 bleu a7,a2,8000222c <__umoddi3+0x114> +80002228: 00800713 li a4,8 +8000222c: 00e8d633 srl a2,a7,a4 +80002230: 00c686b3 add a3,a3,a2 +80002234: 0006ce03 lbu t3,0(a3) +80002238: 02000313 li t1,32 +8000223c: 00ee0e33 add t3,t3,a4 +80002240: 41c30333 sub t1,t1,t3 + if (bm == 0) +80002244: 08031863 bnez t1,800022d4 <__umoddi3+0x1bc> + n1 -= d0; +80002248: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +8000224c: 0108d713 srli a4,a7,0x10 +80002250: 01089513 slli a0,a7,0x10 +80002254: 01055513 srli a0,a0,0x10 +80002258: 0107d613 srli a2,a5,0x10 +8000225c: 02e5f6b3 remu a3,a1,a4 +80002260: 02e5d5b3 divu a1,a1,a4 +80002264: 01069693 slli a3,a3,0x10 +80002268: 00c6e6b3 or a3,a3,a2 +8000226c: 02b505b3 mul a1,a0,a1 +80002270: 00b6fa63 bleu a1,a3,80002284 <__umoddi3+0x16c> +80002274: 011686b3 add a3,a3,a7 +80002278: 0116e663 bltu a3,a7,80002284 <__umoddi3+0x16c> +8000227c: 00b6f463 bleu a1,a3,80002284 <__umoddi3+0x16c> +80002280: 011686b3 add a3,a3,a7 +80002284: 40b685b3 sub a1,a3,a1 +80002288: 02e5f6b3 remu a3,a1,a4 +8000228c: 01079793 slli a5,a5,0x10 +80002290: 0107d793 srli a5,a5,0x10 +80002294: 02e5d5b3 divu a1,a1,a4 +80002298: 02b505b3 mul a1,a0,a1 +8000229c: 01069513 slli a0,a3,0x10 +800022a0: 00f567b3 or a5,a0,a5 +800022a4: 00b7fa63 bleu a1,a5,800022b8 <__umoddi3+0x1a0> +800022a8: 011787b3 add a5,a5,a7 +800022ac: 0117e663 bltu a5,a7,800022b8 <__umoddi3+0x1a0> +800022b0: 00b7f463 bleu a1,a5,800022b8 <__umoddi3+0x1a0> +800022b4: 011787b3 add a5,a5,a7 +800022b8: 40b787b3 sub a5,a5,a1 +800022bc: f31ff06f j 800021ec <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800022c0: 01000637 lui a2,0x1000 +800022c4: 01000713 li a4,16 +800022c8: f6c8e2e3 bltu a7,a2,8000222c <__umoddi3+0x114> +800022cc: 01800713 li a4,24 +800022d0: f5dff06f j 8000222c <__umoddi3+0x114> + d0 = d0 << bm; +800022d4: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800022d8: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +800022dc: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +800022e0: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +800022e4: 0108d513 srli a0,a7,0x10 +800022e8: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +800022ec: 006595b3 sll a1,a1,t1 +800022f0: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +800022f4: 01089593 slli a1,a7,0x10 +800022f8: 0105d593 srli a1,a1,0x10 +800022fc: 010e5613 srli a2,t3,0x10 +80002300: 02a75733 divu a4,a4,a0 +80002304: 01069693 slli a3,a3,0x10 +80002308: 00c6e6b3 or a3,a3,a2 +8000230c: 02e58733 mul a4,a1,a4 +80002310: 00e6fa63 bleu a4,a3,80002324 <__umoddi3+0x20c> +80002314: 011686b3 add a3,a3,a7 +80002318: 0116e663 bltu a3,a7,80002324 <__umoddi3+0x20c> +8000231c: 00e6f463 bleu a4,a3,80002324 <__umoddi3+0x20c> +80002320: 011686b3 add a3,a3,a7 +80002324: 40e68633 sub a2,a3,a4 +80002328: 02a676b3 remu a3,a2,a0 +8000232c: 010e1e13 slli t3,t3,0x10 +80002330: 010e5e13 srli t3,t3,0x10 +80002334: 02a65633 divu a2,a2,a0 +80002338: 01069693 slli a3,a3,0x10 +8000233c: 02c58633 mul a2,a1,a2 +80002340: 01c6e5b3 or a1,a3,t3 +80002344: 00c5fa63 bleu a2,a1,80002358 <__umoddi3+0x240> +80002348: 011585b3 add a1,a1,a7 +8000234c: 0115e663 bltu a1,a7,80002358 <__umoddi3+0x240> +80002350: 00c5f463 bleu a2,a1,80002358 <__umoddi3+0x240> +80002354: 011585b3 add a1,a1,a7 +80002358: 40c585b3 sub a1,a1,a2 +8000235c: ef1ff06f j 8000224c <__umoddi3+0x134> + if (d1 > n1) +80002360: e8d5eae3 bltu a1,a3,800021f4 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80002364: 00010737 lui a4,0x10 +80002368: 04e6fc63 bleu a4,a3,800023c0 <__umoddi3+0x2a8> +8000236c: 0ff00e93 li t4,255 +80002370: 00deb733 sltu a4,t4,a3 +80002374: 00371713 slli a4,a4,0x3 +80002378: 80002337 lui t1,0x80002 +8000237c: 00e6d8b3 srl a7,a3,a4 +80002380: 68030313 addi t1,t1,1664 # 80002680 +80002384: 006888b3 add a7,a7,t1 +80002388: 0008ce83 lbu t4,0(a7) # 1000000 +8000238c: 02000e13 li t3,32 +80002390: 00ee8eb3 add t4,t4,a4 +80002394: 41de0e33 sub t3,t3,t4 + if (bm == 0) +80002398: 020e1e63 bnez t3,800023d4 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +8000239c: 00b6e463 bltu a3,a1,800023a4 <__umoddi3+0x28c> +800023a0: 00c56a63 bltu a0,a2,800023b4 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800023a4: 40c507b3 sub a5,a0,a2 +800023a8: 40d585b3 sub a1,a1,a3 +800023ac: 00f53533 sltu a0,a0,a5 +800023b0: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800023b4: 00078513 mv a0,a5 +800023b8: 00080593 mv a1,a6 +800023bc: e39ff06f j 800021f4 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800023c0: 010008b7 lui a7,0x1000 +800023c4: 01000713 li a4,16 +800023c8: fb16e8e3 bltu a3,a7,80002378 <__umoddi3+0x260> +800023cc: 01800713 li a4,24 +800023d0: fa9ff06f j 80002378 <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800023d4: 01d65733 srl a4,a2,t4 +800023d8: 01c696b3 sll a3,a3,t3 +800023dc: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +800023e0: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +800023e4: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +800023e8: 01c595b3 sll a1,a1,t3 +800023ec: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +800023f0: 0106d593 srli a1,a3,0x10 +800023f4: 02b77333 remu t1,a4,a1 +800023f8: 01069f13 slli t5,a3,0x10 +800023fc: 010f5f13 srli t5,t5,0x10 +80002400: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80002404: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +80002408: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000240c: 02b75733 divu a4,a4,a1 +80002410: 01031313 slli t1,t1,0x10 +80002414: 011368b3 or a7,t1,a7 +80002418: 02ef0833 mul a6,t5,a4 +8000241c: 00070313 mv t1,a4 +80002420: 0108fe63 bleu a6,a7,8000243c <__umoddi3+0x324> +80002424: 00d888b3 add a7,a7,a3 +80002428: fff70313 addi t1,a4,-1 # ffff +8000242c: 00d8e863 bltu a7,a3,8000243c <__umoddi3+0x324> +80002430: 0108f663 bleu a6,a7,8000243c <__umoddi3+0x324> +80002434: ffe70313 addi t1,a4,-2 +80002438: 00d888b3 add a7,a7,a3 +8000243c: 410888b3 sub a7,a7,a6 +80002440: 02b8ffb3 remu t6,a7,a1 +80002444: 02b8d8b3 divu a7,a7,a1 +80002448: 010f9f93 slli t6,t6,0x10 +8000244c: 031f05b3 mul a1,t5,a7 +80002450: 01079f13 slli t5,a5,0x10 +80002454: 010f5f13 srli t5,t5,0x10 +80002458: 01efef33 or t5,t6,t5 +8000245c: 00088713 mv a4,a7 +80002460: 00bf7e63 bleu a1,t5,8000247c <__umoddi3+0x364> +80002464: 00df0f33 add t5,t5,a3 +80002468: fff88713 addi a4,a7,-1 # ffffff +8000246c: 00df6863 bltu t5,a3,8000247c <__umoddi3+0x364> +80002470: 00bf7663 bleu a1,t5,8000247c <__umoddi3+0x364> +80002474: ffe88713 addi a4,a7,-2 +80002478: 00df0f33 add t5,t5,a3 +8000247c: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +80002480: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002484: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +80002488: fff88793 addi a5,a7,-1 # ffff +8000248c: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002490: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +80002494: 00f375b3 and a1,t1,a5 +80002498: 01035313 srli t1,t1,0x10 +8000249c: 00f677b3 and a5,a2,a5 +800024a0: 02f58733 mul a4,a1,a5 +800024a4: 02f307b3 mul a5,t1,a5 +800024a8: 030585b3 mul a1,a1,a6 +800024ac: 03030333 mul t1,t1,a6 +800024b0: 00f585b3 add a1,a1,a5 +800024b4: 01075813 srli a6,a4,0x10 +800024b8: 00b80833 add a6,a6,a1 +800024bc: 00f87463 bleu a5,a6,800024c4 <__umoddi3+0x3ac> +800024c0: 01130333 add t1,t1,a7 +800024c4: 000107b7 lui a5,0x10 +800024c8: fff78793 addi a5,a5,-1 # ffff +800024cc: 01085593 srli a1,a6,0x10 +800024d0: 00f87833 and a6,a6,a5 +800024d4: 01081813 slli a6,a6,0x10 +800024d8: 00f77733 and a4,a4,a5 +800024dc: 006585b3 add a1,a1,t1 +800024e0: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800024e4: 00bf6663 bltu t5,a1,800024f0 <__umoddi3+0x3d8> +800024e8: 00bf1e63 bne t5,a1,80002504 <__umoddi3+0x3ec> +800024ec: 00e57c63 bleu a4,a0,80002504 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +800024f0: 40c70633 sub a2,a4,a2 +800024f4: 00c73733 sltu a4,a4,a2 +800024f8: 40d585b3 sub a1,a1,a3 +800024fc: 40e585b3 sub a1,a1,a4 +80002500: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80002504: 40e50733 sub a4,a0,a4 +80002508: 00e53533 sltu a0,a0,a4 +8000250c: 40bf05b3 sub a1,t5,a1 +80002510: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80002514: 01d597b3 sll a5,a1,t4 +80002518: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +8000251c: 00e7e533 or a0,a5,a4 +80002520: 01c5d5b3 srl a1,a1,t3 + return w; +80002524: cd1ff06f j 800021f4 <__umoddi3+0xdc> + +Disassembly of section .data: + +800027fc : +// See LICENSE for license details. + + +#define DATA_SIZE 400 + +int input_data[DATA_SIZE] = +800027fc: 0029 c.nop 10 +800027fe: 0000 unimp +80002800: 01c6 slli gp,gp,0x11 +80002802: 0000 unimp +80002804: 0341 addi t1,t1,16 +80002806: 0000 unimp +80002808: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +8000280c: 0234 addi a3,sp,264 +8000280e: 0000 unimp +80002810: 0001 nop +80002812: 0000 unimp +80002814: 000000bb 0xbb +80002818: 03dd addi t2,t2,23 +8000281a: 0000 unimp +8000281c: 02ed addi t0,t0,27 +8000281e: 0000 unimp +80002820: 016d addi sp,sp,27 +80002822: 0000 unimp +80002824: 015e slli sp,sp,0x17 +80002826: 0000 unimp +80002828: 023c addi a5,sp,264 +8000282a: 0000 unimp +8000282c: 0084 addi s1,sp,64 +8000282e: 0000 unimp +80002830: 0040 addi s0,sp,4 +80002832: 0000 unimp +80002834: 03b5 addi t2,t2,13 +80002836: 0000 unimp +80002838: 0099 addi ra,ra,6 +8000283a: 0000 unimp +8000283c: 0248 addi a0,sp,260 +8000283e: 0000 unimp +80002840: 00d8 addi a4,sp,68 +80002842: 0000 unimp +80002844: 0325 addi t1,t1,9 +80002846: 0000 unimp +80002848: 008c addi a1,sp,64 +8000284a: 0000 unimp +8000284c: 026d addi tp,tp,27 +8000284e: 0000 unimp +80002850: 00d2 slli ra,ra,0x14 +80002852: 0000 unimp +80002854: 0006 c.slli zero,0x1 +80002856: 0000 unimp +80002858: 023c addi a5,sp,264 +8000285a: 0000 unimp +8000285c: 000003a3 sb zero,7(zero) # 7 +80002860: 00000153 fadd.s ft2,ft0,ft0,rne +80002864: 037a slli t1,t1,0x1e +80002866: 0000 unimp +80002868: 0251 addi tp,tp,20 +8000286a: 0000 unimp +8000286c: 0188 addi a0,sp,192 +8000286e: 0000 unimp +80002870: 0382 slli t2,t2,0x0 +80002872: 0000 unimp +80002874: 02b6 slli t0,t0,0xd +80002876: 0000 unimp +80002878: 00e4 addi s1,sp,76 +8000287a: 0000 unimp +8000287c: 03c1 addi t2,t2,16 +8000287e: 0000 unimp +80002880: 000c 0xc +80002882: 0000 unimp +80002884: 006e c.slli zero,0x1b +80002886: 0000 unimp +80002888: 00000373 0x373 +8000288c: 0074 addi a3,sp,12 +8000288e: 0000 unimp +80002890: 02ee slli t0,t0,0x1b +80002892: 0000 unimp +80002894: 0128 addi a0,sp,136 +80002896: 0000 unimp +80002898: 0286 slli t0,t0,0x1 +8000289a: 0000 unimp +8000289c: 01aa slli gp,gp,0xa +8000289e: 0000 unimp +800028a0: 01f4 addi a3,sp,204 +800028a2: 0000 unimp +800028a4: 013a slli sp,sp,0xe +800028a6: 0000 unimp +800028a8: 01b4 addi a3,sp,200 +800028aa: 0000 unimp +800028ac: 00000293 li t0,0 +800028b0: 02bd addi t0,t0,15 +800028b2: 0000 unimp +800028b4: 0306 slli t1,t1,0x1 +800028b6: 0000 unimp +800028b8: 032c addi a1,sp,392 +800028ba: 0000 unimp +800028bc: 0000013f 000003d5 0x3d50000013f +800028c4: 02a6 slli t0,t0,0x9 +800028c6: 0000 unimp +800028c8: 0096 slli ra,ra,0x5 +800028ca: 0000 unimp +800028cc: 0000036b 0x36b +800028d0: 02b8 addi a4,sp,328 +800028d2: 0000 unimp +800028d4: 0178 addi a4,sp,140 +800028d6: 0000 unimp +800028d8: 0234 addi a3,sp,264 +800028da: 0000 unimp +800028dc: 01da slli gp,gp,0x16 +800028de: 0000 unimp +800028e0: 0110 addi a2,sp,128 +800028e2: 0000 unimp +800028e4: 03aa slli t2,t2,0xa +800028e6: 0000 unimp +800028e8: 0102 slli sp,sp,0x0 +800028ea: 0000 unimp +800028ec: 0000021b 0x21b +800028f0: 00000287 0x287 +800028f4: 0239 addi tp,tp,14 +800028f6: 0000 unimp +800028f8: 01fd addi gp,gp,31 +800028fa: 0000 unimp +800028fc: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002900: 0058 addi a4,sp,4 +80002902: 0000 unimp +80002904: 0118 addi a4,sp,128 +80002906: 0000 unimp +80002908: 000002bf 000002f7 0x2f7000002bf +80002910: 029d addi t0,t0,7 +80002912: 0000 unimp +80002914: 025e slli tp,tp,0x17 +80002916: 0000 unimp +80002918: 00000177 0x177 +8000291c: 01ff 0x1ff +8000291e: 0000 unimp +80002920: 00000227 0x227 +80002924: 0291 addi t0,t0,4 +80002926: 0000 unimp +80002928: 03a8 addi a0,sp,456 +8000292a: 0000 unimp +8000292c: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002930: 0250 addi a2,sp,260 +80002932: 0000 unimp +80002934: 0051 c.nop 20 +80002936: 0000 unimp +80002938: 0239 addi tp,tp,14 +8000293a: 0000 unimp +8000293c: 0000010b 0x10b +80002940: 03b8 addi a4,sp,456 +80002942: 0000 unimp +80002944: 00e5 addi ra,ra,25 +80002946: 0000 unimp +80002948: 0320 addi s0,sp,392 +8000294a: 0000 unimp +8000294c: 0151 addi sp,sp,20 +8000294e: 0000 unimp +80002950: 0248 addi a0,sp,260 +80002952: 0000 unimp +80002954: 03b0 addi a2,sp,456 +80002956: 0000 unimp +80002958: 00000283 lb t0,0(zero) # 0 +8000295c: 0386 slli t2,t2,0x1 +8000295e: 0000 unimp +80002960: 0170 addi a2,sp,140 +80002962: 0000 unimp +80002964: 00f1 addi ra,ra,28 +80002966: 0000 unimp +80002968: 01e9 addi gp,gp,26 +8000296a: 0000 unimp +8000296c: 0391 addi t2,t2,4 +8000296e: 0000 unimp +80002970: 0148 addi a0,sp,132 +80002972: 0000 unimp +80002974: 033a slli t1,t1,0xe +80002976: 0000 unimp +80002978: 0139 addi sp,sp,14 +8000297a: 0000 unimp +8000297c: 03a5 addi t2,t2,9 +8000297e: 0000 unimp +80002980: 0250 addi a2,sp,260 +80002982: 0000 unimp +80002984: 03d9 addi t2,t2,22 +80002986: 0000 unimp +80002988: 0184 addi s1,sp,192 +8000298a: 0000 unimp +8000298c: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002990: 021f 0000 03c0 0x3c00000021f +80002996: 0000 unimp +80002998: 0289 addi t0,t0,2 +8000299a: 0000 unimp +8000299c: 0236 slli tp,tp,0xd +8000299e: 0000 unimp +800029a0: 000003d3 fadd.s ft7,ft0,ft0,rne +800029a4: 015e slli sp,sp,0x17 +800029a6: 0000 unimp +800029a8: 03e5 addi t2,t2,25 +800029aa: 0000 unimp +800029ac: 0289 addi t0,t0,2 +800029ae: 0000 unimp +800029b0: 032e slli t1,t1,0xb +800029b2: 0000 unimp +800029b4: 0291 addi t0,t0,4 +800029b6: 0000 unimp +800029b8: 0000004f fnmadd.s ft0,ft0,ft0,ft0,rne +800029bc: 00b5 addi ra,ra,13 +800029be: 0000 unimp +800029c0: 00d0 addi a2,sp,68 +800029c2: 0000 unimp +800029c4: 0000006f j 800029c4 +800029c8: 03e6 slli t2,t2,0x19 +800029ca: 0000 unimp +800029cc: 0000035b 0x35b +800029d0: 0275 addi tp,tp,29 +800029d2: 0000 unimp +800029d4: 0041 c.nop 16 +800029d6: 0000 unimp +800029d8: 0000034f fnmadd.s ft6,ft0,ft0,ft0,rne +800029dc: 0120 addi s0,sp,136 +800029de: 0000 unimp +800029e0: 02c0 addi s0,sp,324 +800029e2: 0000 unimp +800029e4: 015d addi sp,sp,23 +800029e6: 0000 unimp +800029e8: 03e5 addi t2,t2,25 +800029ea: 0000 unimp +800029ec: 008d addi ra,ra,3 +800029ee: 0000 unimp +800029f0: 00fd addi ra,ra,31 +800029f2: 0000 unimp +800029f4: 0389 addi t2,t2,2 +800029f6: 0000 unimp +800029f8: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +800029fc: 0376 slli t1,t1,0x1d +800029fe: 0000 unimp +80002a00: 01ae slli gp,gp,0xb +80002a02: 0000 unimp +80002a04: 0108 addi a0,sp,128 +80002a06: 0000 unimp +80002a08: 019f 0000 0240 0x2400000019f +80002a0e: 0000 unimp +80002a10: 021a slli tp,tp,0x6 +80002a12: 0000 unimp +80002a14: 000003d3 fadd.s ft7,ft0,ft0,rne +80002a18: 02bc addi a5,sp,328 +80002a1a: 0000 unimp +80002a1c: 02f9 addi t0,t0,30 +80002a1e: 0000 unimp +80002a20: 0004 0x4 +80002a22: 0000 unimp +80002a24: 00f1 addi ra,ra,28 +80002a26: 0000 unimp +80002a28: 01ee slli gp,gp,0x1b +80002a2a: 0000 unimp +80002a2c: 01de slli gp,gp,0x17 +80002a2e: 0000 unimp +80002a30: 0064 addi s1,sp,12 +80002a32: 0000 unimp +80002a34: 000001f3 0x1f3 +80002a38: 0360 addi s0,sp,396 +80002a3a: 0000 unimp +80002a3c: 00000193 li gp,0 +80002a40: 02b5 addi t0,t0,13 +80002a42: 0000 unimp +80002a44: 00de slli ra,ra,0x17 +80002a46: 0000 unimp +80002a48: 01a0 addi s0,sp,200 +80002a4a: 0000 unimp +80002a4c: 01bc addi a5,sp,200 +80002a4e: 0000 unimp +80002a50: 0128 addi a0,sp,136 +80002a52: 0000 unimp +80002a54: 02d1 addi t0,t0,20 +80002a56: 0000 unimp +80002a58: 011d addi sp,sp,7 +80002a5a: 0000 unimp +80002a5c: 02a4 addi s1,sp,328 +80002a5e: 0000 unimp +80002a60: 026c addi a1,sp,268 +80002a62: 0000 unimp +80002a64: 013d addi sp,sp,15 +80002a66: 0000 unimp +80002a68: 004e c.slli zero,0x13 +80002a6a: 0000 unimp +80002a6c: 00e0 addi s0,sp,76 +80002a6e: 0000 unimp +80002a70: 015f 0000 03a9 0x3a90000015f +80002a76: 0000 unimp +80002a78: 021c addi a5,sp,256 +80002a7a: 0000 unimp +80002a7c: 0120 addi s0,sp,136 +80002a7e: 0000 unimp +80002a80: 0286 slli t0,t0,0x1 +80002a82: 0000 unimp +80002a84: 00000077 0x77 +80002a88: 00a9 addi ra,ra,10 +80002a8a: 0000 unimp +80002a8c: 00000267 jalr tp,zero +80002a90: 0000020f 0x20f +80002a94: 025e slli tp,tp,0x17 +80002a96: 0000 unimp +80002a98: 0121 addi sp,sp,8 +80002a9a: 0000 unimp +80002a9c: 0185 addi gp,gp,1 +80002a9e: 0000 unimp +80002aa0: 031c addi a5,sp,384 +80002aa2: 0000 unimp +80002aa4: 015f 0000 0321 0x3210000015f +80002aaa: 0000 unimp +80002aac: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +80002ab0: 02d0 addi a2,sp,324 +80002ab2: 0000 unimp +80002ab4: 0116 slli sp,sp,0x5 +80002ab6: 0000 unimp +80002ab8: 02f6 slli t0,t0,0x1d +80002aba: 0000 unimp +80002abc: 0000016f jal sp,80002abc +80002ac0: 02e9 addi t0,t0,26 +80002ac2: 0000 unimp +80002ac4: 0166 slli sp,sp,0x19 +80002ac6: 0000 unimp +80002ac8: 005c addi a5,sp,4 +80002aca: 0000 unimp +80002acc: 0248 addi a0,sp,260 +80002ace: 0000 unimp +80002ad0: 03dd addi t2,t2,23 +80002ad2: 0000 unimp +80002ad4: 003e c.slli zero,0xf +80002ad6: 0000 unimp +80002ad8: 0000010f 0x10f +80002adc: 03d9 addi t2,t2,22 +80002ade: 0000 unimp +80002ae0: 0355 addi t1,t1,21 +80002ae2: 0000 unimp +80002ae4: 00000193 li gp,0 +80002ae8: 0314 addi a3,sp,384 +80002aea: 0000 unimp +80002aec: 015a slli sp,sp,0x16 +80002aee: 0000 unimp +80002af0: 00000213 li tp,0 +80002af4: 0205 addi tp,tp,1 +80002af6: 0000 unimp +80002af8: 00de slli ra,ra,0x17 +80002afa: 0000 unimp +80002afc: 0000022f 0x22f +80002b00: 01cd addi gp,gp,19 +80002b02: 0000 unimp +80002b04: 038c addi a1,sp,448 +80002b06: 0000 unimp +80002b08: 00f1 addi ra,ra,28 +80002b0a: 0000 unimp +80002b0c: 00000307 0x307 +80002b10: 0166 slli sp,sp,0x19 +80002b12: 0000 unimp +80002b14: 00ff 0xff +80002b16: 0000 unimp +80002b18: 014c addi a1,sp,132 +80002b1a: 0000 unimp +80002b1c: 030a slli t1,t1,0x2 +80002b1e: 0000 unimp +80002b20: 02ac addi a1,sp,328 +80002b22: 0000 unimp +80002b24: 0256 slli tp,tp,0x15 +80002b26: 0000 unimp +80002b28: 02e4 addi s1,sp,332 +80002b2a: 0000 unimp +80002b2c: 0000008f 0x8f +80002b30: 01be slli gp,gp,0xf +80002b32: 0000 unimp +80002b34: 0021 c.nop 8 +80002b36: 0000 unimp +80002b38: 00000137 lui sp,0x0 +80002b3c: 007d c.nop 31 +80002b3e: 0000 unimp +80002b40: 000002e7 jalr t0,zero +80002b44: 03ad addi t2,t2,11 +80002b46: 0000 unimp +80002b48: 022d addi tp,tp,11 +80002b4a: 0000 unimp +80002b4c: 03a5 addi t2,t2,9 +80002b4e: 0000 unimp +80002b50: 01df 0000 031f 0x31f000001df +80002b56: 0000 unimp +80002b58: 022d addi tp,tp,11 +80002b5a: 0000 unimp +80002b5c: 0229 addi tp,tp,10 +80002b5e: 0000 unimp +80002b60: 039d addi t2,t2,7 +80002b62: 0000 unimp +80002b64: 000001af 0x1af +80002b68: 031c addi a5,sp,384 +80002b6a: 0000 unimp +80002b6c: 0288 addi a0,sp,320 +80002b6e: 0000 unimp +80002b70: 0165 addi sp,sp,25 +80002b72: 0000 unimp +80002b74: 03b8 addi a4,sp,456 +80002b76: 0000 unimp +80002b78: 0000037b 0x37b +80002b7c: 011f 0000 029a 0x29a0000011f +80002b82: 0000 unimp +80002b84: 00000013 nop +80002b88: 0202 slli tp,tp,0x0 +80002b8a: 0000 unimp +80002b8c: 0031 c.nop 12 +80002b8e: 0000 unimp +80002b90: 022d addi tp,tp,11 +80002b92: 0000 unimp +80002b94: 0056 c.slli zero,0x15 +80002b96: 0000 unimp +80002b98: 0366 slli t1,t1,0x19 +80002b9a: 0000 unimp +80002b9c: 005f 0000 0355 0x3550000005f +80002ba2: 0000 unimp +80002ba4: 01b9 addi gp,gp,14 +80002ba6: 0000 unimp +80002ba8: 01b8 addi a4,sp,200 +80002baa: 0000 unimp +80002bac: 0000024b fnmsub.s ft4,ft0,ft0,ft0,rne +80002bb0: 003d c.nop 15 +80002bb2: 0000 unimp +80002bb4: 0266 slli tp,tp,0x19 +80002bb6: 0000 unimp +80002bb8: 02a6 slli t0,t0,0x9 +80002bba: 0000 unimp +80002bbc: 017e slli sp,sp,0x1f +80002bbe: 0000 unimp +80002bc0: 018c addi a1,sp,192 +80002bc2: 0000 unimp +80002bc4: 0118 addi a4,sp,128 +80002bc6: 0000 unimp +80002bc8: 0009 c.nop 2 +80002bca: 0000 unimp +80002bcc: 0328 addi a0,sp,392 +80002bce: 0000 unimp +80002bd0: 0011 c.nop 4 +80002bd2: 0000 unimp +80002bd4: 000003cb fnmsub.s ft7,ft0,ft0,ft0,rne +80002bd8: 00aa slli ra,ra,0xa +80002bda: 0000 unimp +80002bdc: 00000333 add t1,zero,zero +80002be0: 00000123 sb zero,2(zero) # 2 +80002be4: 0158 addi a4,sp,132 +80002be6: 0000 unimp +80002be8: 017c addi a5,sp,140 +80002bea: 0000 unimp +80002bec: 01c2 slli gp,gp,0x10 +80002bee: 0000 unimp +80002bf0: 0218 addi a4,sp,256 +80002bf2: 0000 unimp +80002bf4: 0200 addi s0,sp,256 +80002bf6: 0000 unimp +80002bf8: 00b9 addi ra,ra,14 +80002bfa: 0000 unimp +80002bfc: 03c5 addi t2,t2,17 +80002bfe: 0000 unimp +80002c00: 0395 addi t2,t2,5 +80002c02: 0000 unimp +80002c04: 0000015b 0x15b +80002c08: 0000021b 0x21b +80002c0c: 0328 addi a0,sp,392 +80002c0e: 0000 unimp +80002c10: 000003d7 0x3d7 +80002c14: 0372 slli t1,t1,0x1c +80002c16: 0000 unimp +80002c18: 00000377 0x377 +80002c1c: 0219 addi tp,tp,6 +80002c1e: 0000 unimp +80002c20: 0036 c.slli zero,0xd +80002c22: 0000 unimp +80002c24: 03b2 slli t2,t2,0xc +80002c26: 0000 unimp +80002c28: 0264 addi s1,sp,268 +80002c2a: 0000 unimp +80002c2c: 02bd addi t0,t0,15 +80002c2e: 0000 unimp +80002c30: 000003b7 lui t2,0x0 +80002c34: 0164 addi s1,sp,140 +80002c36: 0000 unimp +80002c38: 01df 0000 0237 0x237000001df +80002c3e: 0000 unimp +80002c40: 00000097 auipc ra,0x0 +80002c44: 0000037b 0x37b +80002c48: 00000007 0x7 +80002c4c: 0016 c.slli zero,0x5 +80002c4e: 0000 unimp +80002c50: 0281 addi t0,t0,0 +80002c52: 0000 unimp +80002c54: 0238 addi a4,sp,264 +80002c56: 0000 unimp +80002c58: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +80002c5c: 0299 addi t0,t0,6 +80002c5e: 0000 unimp +80002c60: 02da slli t0,t0,0x16 +80002c62: 0000 unimp +80002c64: 000001a7 0x1a7 +80002c68: 005f 0000 01b2 0x1b20000005f +80002c6e: 0000 unimp +80002c70: 02d8 addi a4,sp,324 +80002c72: 0000 unimp +80002c74: 009e slli ra,ra,0x7 +80002c76: 0000 unimp +80002c78: 0118 addi a4,sp,128 +80002c7a: 0000 unimp +80002c7c: 0002 c.slli zero,0x0 +80002c7e: 0000 unimp +80002c80: 0000018b 0x18b +80002c84: 0054 addi a3,sp,4 +80002c86: 0000 unimp +80002c88: 02b0 addi a2,sp,328 +80002c8a: 0000 unimp +80002c8c: 000000f7 0xf7 +80002c90: 0000038f 0x38f +80002c94: 0031 c.nop 12 +80002c96: 0000 unimp +80002c98: 01dc addi a5,sp,196 +80002c9a: 0000 unimp +80002c9c: 000001b3 add gp,zero,zero +80002ca0: 0000032f 0x32f +80002ca4: 0318 addi a4,sp,384 +80002ca6: 0000 unimp +80002ca8: 02d9 addi t0,t0,22 +80002caa: 0000 unimp +80002cac: 0365 addi t1,t1,25 +80002cae: 0000 unimp +80002cb0: 0109 addi sp,sp,2 +80002cb2: 0000 unimp +80002cb4: 01e6 slli gp,gp,0x19 +80002cb6: 0000 unimp +80002cb8: 007f 0x7f +80002cba: 0000 unimp +80002cbc: 019e slli gp,gp,0x7 +80002cbe: 0000 unimp +80002cc0: 00ec addi a1,sp,76 +80002cc2: 0000 unimp +80002cc4: 0171 addi sp,sp,28 +80002cc6: 0000 unimp +80002cc8: 00d6 slli ra,ra,0x15 +80002cca: 0000 unimp +80002ccc: 0224 addi s1,sp,264 +80002cce: 0000 unimp +80002cd0: 00b4 addi a3,sp,72 +80002cd2: 0000 unimp +80002cd4: 0206 slli tp,tp,0x1 +80002cd6: 0000 unimp +80002cd8: 0006 c.slli zero,0x1 +80002cda: 0000 unimp +80002cdc: 0378 addi a4,sp,396 +80002cde: 0000 unimp +80002ce0: 000001f7 0x1f7 +80002ce4: 02aa slli t0,t0,0xa +80002ce6: 0000 unimp +80002ce8: 0254 addi a3,sp,260 +80002cea: 0000 unimp +80002cec: 011c addi a5,sp,128 +80002cee: 0000 unimp +80002cf0: 00ad addi ra,ra,11 +80002cf2: 0000 unimp +80002cf4: 0108 addi a0,sp,128 +80002cf6: 0000 unimp +80002cf8: 00000283 lb t0,0(zero) # 0 +80002cfc: 000001f3 0x1f3 +80002d00: 015a slli sp,sp,0x16 +80002d02: 0000 unimp +80002d04: 0122 slli sp,sp,0x8 +80002d06: 0000 unimp +80002d08: 00000257 0x257 +80002d0c: 0381 addi t2,t2,0 +80002d0e: 0000 unimp +80002d10: 0044 addi s1,sp,4 +80002d12: 0000 unimp +80002d14: 000000d7 0xd7 +80002d18: 0351 addi t1,t1,20 +80002d1a: 0000 unimp +80002d1c: 000002db 0x2db +80002d20: 0292 slli t0,t0,0x4 +80002d22: 0000 unimp +80002d24: 02b0 addi a2,sp,328 +80002d26: 0000 unimp +80002d28: 0000026b 0x26b +80002d2c: 000000fb 0xfb +80002d30: 0079 c.nop 30 +80002d32: 0000 unimp +80002d34: 0312 slli t1,t1,0x4 +80002d36: 0000 unimp +80002d38: 00000083 lb ra,0(zero) # 0 +80002d3c: 0000022b 0x22b +80002d40: 033c addi a5,sp,392 +80002d42: 0000 unimp +80002d44: 012e slli sp,sp,0xb +80002d46: 0000 unimp +80002d48: 0000029b 0x29b +80002d4c: 0210 addi a2,sp,256 +80002d4e: 0000 unimp +80002d50: 01b1 addi gp,gp,12 +80002d52: 0000 unimp +80002d54: 0220 addi s0,sp,264 +80002d56: 0000 unimp +80002d58: 000001e7 jalr gp,zero +80002d5c: 0142 slli sp,sp,0x10 +80002d5e: 0000 unimp +80002d60: 02f1 addi t0,t0,28 +80002d62: 0000 unimp +80002d64: 000003b3 add t2,zero,zero +80002d68: 007d c.nop 31 +80002d6a: 0000 unimp +80002d6c: 011f 0000 0272 0x2720000011f +80002d72: 0000 unimp +80002d74: 0338 addi a4,sp,392 +80002d76: 0000 unimp +80002d78: 000e c.slli zero,0x3 +80002d7a: 0000 unimp +80002d7c: 0130 addi a2,sp,136 +80002d7e: 0000 unimp +80002d80: 000a c.slli zero,0x2 +80002d82: 0000 unimp +80002d84: 0314 addi a3,sp,384 +80002d86: 0000 unimp +80002d88: 00000193 li gp,0 +80002d8c: 02dd addi t0,t0,23 +80002d8e: 0000 unimp +80002d90: 006a c.slli zero,0x1a +80002d92: 0000 unimp +80002d94: 000003bf 000002bf 0x2bf000003bf +80002d9c: 016e slli sp,sp,0x1b +80002d9e: 0000 unimp +80002da0: 0332 slli t1,t1,0xc +80002da2: 0000 unimp +80002da4: 02d2 slli t0,t0,0x14 +80002da6: 0000 unimp +80002da8: 03c4 addi s1,sp,452 +80002daa: 0000 unimp +80002dac: 0126 slli sp,sp,0x9 +80002dae: 0000 unimp +80002db0: 0196 slli gp,gp,0x5 +80002db2: 0000 unimp +80002db4: 000003cf fnmadd.s ft7,ft0,ft0,ft0,rne +80002db8: 036a slli t1,t1,0x1a +80002dba: 0000 unimp +80002dbc: 028d addi t0,t0,3 +80002dbe: 0000 unimp +80002dc0: 0358 addi a4,sp,388 +80002dc2: 0000 unimp +80002dc4: 02ec addi a1,sp,332 +80002dc6: 0000 unimp +80002dc8: 0056 c.slli zero,0x15 +80002dca: 0000 unimp +80002dcc: 0000005b 0x5b +80002dd0: 003c addi a5,sp,8 +80002dd2: 0000 unimp +80002dd4: 017a slli sp,sp,0x1e +80002dd6: 0000 unimp +80002dd8: 0294 addi a3,sp,320 +80002dda: 0000 unimp +80002ddc: 0069 c.nop 26 +80002dde: 0000 unimp +80002de0: 0000029b 0x29b +80002de4: 0066 c.slli zero,0x19 +80002de6: 0000 unimp +80002de8: 0099 addi ra,ra,6 +80002dea: 0000 unimp +80002dec: 017d addi sp,sp,31 +80002dee: 0000 unimp +80002df0: 0079 c.nop 30 +80002df2: 0000 unimp +80002df4: 0000028b 0x28b +80002df8: 0062 c.slli zero,0x18 +80002dfa: 0000 unimp +80002dfc: 0339 addi t1,t1,14 +80002dfe: 0000 unimp +80002e00: 019c addi a5,sp,192 +80002e02: 0000 unimp +80002e04: 0348 addi a0,sp,388 +80002e06: 0000 unimp +80002e08: 00ec addi a1,sp,76 +80002e0a: 0000 unimp +80002e0c: 0164 addi s1,sp,140 +80002e0e: 0000 unimp +80002e10: 000c 0xc +80002e12: 0000 unimp +80002e14: 0094 addi a3,sp,64 +80002e16: 0000 unimp +80002e18: 000001a7 0x1a7 +80002e1c: 0036 c.slli zero,0xd +80002e1e: 0000 unimp +80002e20: 03c5 addi t2,t2,17 +80002e22: 0000 unimp +80002e24: 008c addi a1,sp,64 +80002e26: 0000 unimp +80002e28: 00d8 addi a4,sp,68 +80002e2a: 0000 unimp +80002e2c: 000003bb 0x3bb +80002e30: 026d addi tp,tp,27 +80002e32: 0000 unimp +80002e34: 00000157 0x157 +80002e38: 0169 addi sp,sp,26 +80002e3a: 0000 unimp + +80002e3c : + 528, 433, 544, 487, 322, 753, 947, 125, 287, 626, 824, 14, 304, 10, 788, 403, 733, 106, 959, 703, + 366, 818, 722, 964, 294, 406, 975, 874, 653, 856, 748, 86, 91, 60, 378, 660, 105, 667, 102, 153, + 381, 121, 651, 98, 825, 412, 840, 236, 356, 12, 148, 423, 54, 965, 140, 216, 955, 621, 343, 361 +}; + +int verify_data[DATA_SIZE] = +80002e3c: 0000 unimp +80002e3e: 0000 unimp +80002e40: 01c6 slli gp,gp,0x11 +80002e42: 0000 unimp +80002e44: 01c6 slli gp,gp,0x11 +80002e46: 0000 unimp +80002e48: 0234 addi a3,sp,264 +80002e4a: 0000 unimp +80002e4c: 0000014f fnmadd.s ft2,ft0,ft0,ft0,rne +80002e50: 000000bb 0xbb +80002e54: 000000bb 0xbb +80002e58: 02ed addi t0,t0,27 +80002e5a: 0000 unimp +80002e5c: 02ed addi t0,t0,27 +80002e5e: 0000 unimp +80002e60: 016d addi sp,sp,27 +80002e62: 0000 unimp +80002e64: 016d addi sp,sp,27 +80002e66: 0000 unimp +80002e68: 015e slli sp,sp,0x17 +80002e6a: 0000 unimp +80002e6c: 0084 addi s1,sp,64 +80002e6e: 0000 unimp +80002e70: 0084 addi s1,sp,64 +80002e72: 0000 unimp +80002e74: 0099 addi ra,ra,6 +80002e76: 0000 unimp +80002e78: 0248 addi a0,sp,260 +80002e7a: 0000 unimp +80002e7c: 00d8 addi a4,sp,68 +80002e7e: 0000 unimp +80002e80: 0248 addi a0,sp,260 +80002e82: 0000 unimp +80002e84: 00d8 addi a4,sp,68 +80002e86: 0000 unimp +80002e88: 026d addi tp,tp,27 +80002e8a: 0000 unimp +80002e8c: 00d2 slli ra,ra,0x14 +80002e8e: 0000 unimp +80002e90: 00d2 slli ra,ra,0x14 +80002e92: 0000 unimp +80002e94: 00d2 slli ra,ra,0x14 +80002e96: 0000 unimp +80002e98: 023c addi a5,sp,264 +80002e9a: 0000 unimp +80002e9c: 023c addi a5,sp,264 +80002e9e: 0000 unimp +80002ea0: 037a slli t1,t1,0x1e +80002ea2: 0000 unimp +80002ea4: 0251 addi tp,tp,20 +80002ea6: 0000 unimp +80002ea8: 0251 addi tp,tp,20 +80002eaa: 0000 unimp +80002eac: 0251 addi tp,tp,20 +80002eae: 0000 unimp +80002eb0: 02b6 slli t0,t0,0xd +80002eb2: 0000 unimp +80002eb4: 02b6 slli t0,t0,0xd +80002eb6: 0000 unimp +80002eb8: 02b6 slli t0,t0,0xd +80002eba: 0000 unimp +80002ebc: 00e4 addi s1,sp,76 +80002ebe: 0000 unimp +80002ec0: 006e c.slli zero,0x1b +80002ec2: 0000 unimp +80002ec4: 006e c.slli zero,0x1b +80002ec6: 0000 unimp +80002ec8: 0074 addi a3,sp,12 +80002eca: 0000 unimp +80002ecc: 02ee slli t0,t0,0x1b +80002ece: 0000 unimp +80002ed0: 0128 addi a0,sp,136 +80002ed2: 0000 unimp +80002ed4: 0286 slli t0,t0,0x1 +80002ed6: 0000 unimp +80002ed8: 01aa slli gp,gp,0xa +80002eda: 0000 unimp +80002edc: 01f4 addi a3,sp,204 +80002ede: 0000 unimp +80002ee0: 01aa slli gp,gp,0xa +80002ee2: 0000 unimp +80002ee4: 01b4 addi a3,sp,200 +80002ee6: 0000 unimp +80002ee8: 01b4 addi a3,sp,200 +80002eea: 0000 unimp +80002eec: 00000293 li t0,0 +80002ef0: 02bd addi t0,t0,15 +80002ef2: 0000 unimp +80002ef4: 0306 slli t1,t1,0x1 +80002ef6: 0000 unimp +80002ef8: 0306 slli t1,t1,0x1 +80002efa: 0000 unimp +80002efc: 032c addi a1,sp,392 +80002efe: 0000 unimp +80002f00: 02a6 slli t0,t0,0x9 +80002f02: 0000 unimp +80002f04: 02a6 slli t0,t0,0x9 +80002f06: 0000 unimp +80002f08: 02a6 slli t0,t0,0x9 +80002f0a: 0000 unimp +80002f0c: 02b8 addi a4,sp,328 +80002f0e: 0000 unimp +80002f10: 02b8 addi a4,sp,328 +80002f12: 0000 unimp +80002f14: 0234 addi a3,sp,264 +80002f16: 0000 unimp +80002f18: 01da slli gp,gp,0x16 +80002f1a: 0000 unimp +80002f1c: 01da slli gp,gp,0x16 +80002f1e: 0000 unimp +80002f20: 01da slli gp,gp,0x16 +80002f22: 0000 unimp +80002f24: 0110 addi a2,sp,128 +80002f26: 0000 unimp +80002f28: 0000021b 0x21b +80002f2c: 0000021b 0x21b +80002f30: 0239 addi tp,tp,14 +80002f32: 0000 unimp +80002f34: 0239 addi tp,tp,14 +80002f36: 0000 unimp +80002f38: 01fd addi gp,gp,31 +80002f3a: 0000 unimp +80002f3c: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002f40: 000000cb fnmsub.s ft1,ft0,ft0,ft0,rne +80002f44: 0118 addi a4,sp,128 +80002f46: 0000 unimp +80002f48: 000002bf 000002bf 0x2bf000002bf +80002f50: 029d addi t0,t0,7 +80002f52: 0000 unimp +80002f54: 025e slli tp,tp,0x17 +80002f56: 0000 unimp +80002f58: 01ff 0x1ff +80002f5a: 0000 unimp +80002f5c: 01ff 0x1ff +80002f5e: 0000 unimp +80002f60: 00000227 0x227 +80002f64: 0291 addi t0,t0,4 +80002f66: 0000 unimp +80002f68: 0291 addi t0,t0,4 +80002f6a: 0000 unimp +80002f6c: 0250 addi a2,sp,260 +80002f6e: 0000 unimp +80002f70: 000000c3 fmadd.s ft1,ft0,ft0,ft0,rne +80002f74: 0239 addi tp,tp,14 +80002f76: 0000 unimp +80002f78: 0000010b 0x10b +80002f7c: 0239 addi tp,tp,14 +80002f7e: 0000 unimp +80002f80: 0000010b 0x10b +80002f84: 0320 addi s0,sp,392 +80002f86: 0000 unimp +80002f88: 0151 addi sp,sp,20 +80002f8a: 0000 unimp +80002f8c: 0248 addi a0,sp,260 +80002f8e: 0000 unimp +80002f90: 0248 addi a0,sp,260 +80002f92: 0000 unimp +80002f94: 00000283 lb t0,0(zero) # 0 +80002f98: 0386 slli t2,t2,0x1 +80002f9a: 0000 unimp +80002f9c: 00000283 lb t0,0(zero) # 0 +80002fa0: 0170 addi a2,sp,140 +80002fa2: 0000 unimp +80002fa4: 0170 addi a2,sp,140 +80002fa6: 0000 unimp +80002fa8: 01e9 addi gp,gp,26 +80002faa: 0000 unimp +80002fac: 01e9 addi gp,gp,26 +80002fae: 0000 unimp +80002fb0: 033a slli t1,t1,0xe +80002fb2: 0000 unimp +80002fb4: 0148 addi a0,sp,132 +80002fb6: 0000 unimp +80002fb8: 033a slli t1,t1,0xe +80002fba: 0000 unimp +80002fbc: 0250 addi a2,sp,260 +80002fbe: 0000 unimp +80002fc0: 03a5 addi t2,t2,9 +80002fc2: 0000 unimp +80002fc4: 0250 addi a2,sp,260 +80002fc6: 0000 unimp +80002fc8: 0184 addi s1,sp,192 +80002fca: 0000 unimp +80002fcc: 0184 addi s1,sp,192 +80002fce: 0000 unimp +80002fd0: 021f 0000 0289 0x2890000021f +80002fd6: 0000 unimp +80002fd8: 0289 addi t0,t0,2 +80002fda: 0000 unimp +80002fdc: 0289 addi t0,t0,2 +80002fde: 0000 unimp +80002fe0: 0236 slli tp,tp,0xd +80002fe2: 0000 unimp +80002fe4: 000003d3 fadd.s ft7,ft0,ft0,rne +80002fe8: 0289 addi t0,t0,2 +80002fea: 0000 unimp +80002fec: 032e slli t1,t1,0xb +80002fee: 0000 unimp +80002ff0: 0291 addi t0,t0,4 +80002ff2: 0000 unimp +80002ff4: 0291 addi t0,t0,4 +80002ff6: 0000 unimp +80002ff8: 00b5 addi ra,ra,13 +80002ffa: 0000 unimp +80002ffc: 00b5 addi ra,ra,13 +80002ffe: 0000 unimp +80003000: 00b5 addi ra,ra,13 +80003002: 0000 unimp +80003004: 00d0 addi a2,sp,68 +80003006: 0000 unimp +80003008: 0000035b 0x35b +8000300c: 0000035b 0x35b +80003010: 0275 addi tp,tp,29 +80003012: 0000 unimp +80003014: 0275 addi tp,tp,29 +80003016: 0000 unimp +80003018: 0120 addi s0,sp,136 +8000301a: 0000 unimp +8000301c: 02c0 addi s0,sp,324 +8000301e: 0000 unimp +80003020: 015d addi sp,sp,23 +80003022: 0000 unimp +80003024: 02c0 addi s0,sp,324 +80003026: 0000 unimp +80003028: 015d addi sp,sp,23 +8000302a: 0000 unimp +8000302c: 00fd addi ra,ra,31 +8000302e: 0000 unimp +80003030: 00fd addi ra,ra,31 +80003032: 0000 unimp +80003034: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +80003038: 0376 slli t1,t1,0x1d +8000303a: 0000 unimp +8000303c: 000002cb fnmsub.s ft5,ft0,ft0,ft0,rne +80003040: 01ae slli gp,gp,0xb +80003042: 0000 unimp +80003044: 019f 0000 019f 0x19f0000019f +8000304a: 0000 unimp +8000304c: 021a slli tp,tp,0x6 +8000304e: 0000 unimp +80003050: 0240 addi s0,sp,260 +80003052: 0000 unimp +80003054: 02bc addi a5,sp,328 +80003056: 0000 unimp +80003058: 02f9 addi t0,t0,30 +8000305a: 0000 unimp +8000305c: 02bc addi a5,sp,328 +8000305e: 0000 unimp +80003060: 00f1 addi ra,ra,28 +80003062: 0000 unimp +80003064: 00f1 addi ra,ra,28 +80003066: 0000 unimp +80003068: 01de slli gp,gp,0x17 +8000306a: 0000 unimp +8000306c: 01de slli gp,gp,0x17 +8000306e: 0000 unimp +80003070: 01de slli gp,gp,0x17 +80003072: 0000 unimp +80003074: 000001f3 0x1f3 +80003078: 000001f3 0x1f3 +8000307c: 02b5 addi t0,t0,13 +8000307e: 0000 unimp +80003080: 00000193 li gp,0 +80003084: 01a0 addi s0,sp,200 +80003086: 0000 unimp +80003088: 01a0 addi s0,sp,200 +8000308a: 0000 unimp +8000308c: 01a0 addi s0,sp,200 +8000308e: 0000 unimp +80003090: 01bc addi a5,sp,200 +80003092: 0000 unimp +80003094: 0128 addi a0,sp,136 +80003096: 0000 unimp +80003098: 02a4 addi s1,sp,328 +8000309a: 0000 unimp +8000309c: 026c addi a1,sp,268 +8000309e: 0000 unimp +800030a0: 026c addi a1,sp,268 +800030a2: 0000 unimp +800030a4: 013d addi sp,sp,15 +800030a6: 0000 unimp +800030a8: 00e0 addi s0,sp,76 +800030aa: 0000 unimp +800030ac: 00e0 addi s0,sp,76 +800030ae: 0000 unimp +800030b0: 015f 0000 021c 0x21c0000015f +800030b6: 0000 unimp +800030b8: 021c addi a5,sp,256 +800030ba: 0000 unimp +800030bc: 021c addi a5,sp,256 +800030be: 0000 unimp +800030c0: 0120 addi s0,sp,136 +800030c2: 0000 unimp +800030c4: 00a9 addi ra,ra,10 +800030c6: 0000 unimp +800030c8: 00a9 addi ra,ra,10 +800030ca: 0000 unimp +800030cc: 0000020f 0x20f +800030d0: 025e slli tp,tp,0x17 +800030d2: 0000 unimp +800030d4: 0000020f 0x20f +800030d8: 0185 addi gp,gp,1 +800030da: 0000 unimp +800030dc: 0185 addi gp,gp,1 +800030de: 0000 unimp +800030e0: 0185 addi gp,gp,1 +800030e2: 0000 unimp +800030e4: 031c addi a5,sp,384 +800030e6: 0000 unimp +800030e8: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +800030ec: 02d0 addi a2,sp,324 +800030ee: 0000 unimp +800030f0: 000001c7 fmsub.s ft3,ft0,ft0,ft0,rne +800030f4: 02d0 addi a2,sp,324 +800030f6: 0000 unimp +800030f8: 0000016f jal sp,800030f8 +800030fc: 02e9 addi t0,t0,26 +800030fe: 0000 unimp +80003100: 0000016f jal sp,80003100 +80003104: 0166 slli sp,sp,0x19 +80003106: 0000 unimp +80003108: 0166 slli sp,sp,0x19 +8000310a: 0000 unimp +8000310c: 0248 addi a0,sp,260 +8000310e: 0000 unimp +80003110: 0248 addi a0,sp,260 +80003112: 0000 unimp +80003114: 0000010f 0x10f +80003118: 0000010f 0x10f +8000311c: 0355 addi t1,t1,21 +8000311e: 0000 unimp +80003120: 0355 addi t1,t1,21 +80003122: 0000 unimp +80003124: 0314 addi a3,sp,384 +80003126: 0000 unimp +80003128: 00000193 li gp,0 +8000312c: 00000213 li tp,0 +80003130: 0205 addi tp,tp,1 +80003132: 0000 unimp +80003134: 0205 addi tp,tp,1 +80003136: 0000 unimp +80003138: 0205 addi tp,tp,1 +8000313a: 0000 unimp +8000313c: 01cd addi gp,gp,19 +8000313e: 0000 unimp +80003140: 0000022f 0x22f +80003144: 01cd addi gp,gp,19 +80003146: 0000 unimp +80003148: 00000307 0x307 +8000314c: 0166 slli sp,sp,0x19 +8000314e: 0000 unimp +80003150: 0166 slli sp,sp,0x19 +80003152: 0000 unimp +80003154: 014c addi a1,sp,132 +80003156: 0000 unimp +80003158: 014c addi a1,sp,132 +8000315a: 0000 unimp +8000315c: 02ac addi a1,sp,328 +8000315e: 0000 unimp +80003160: 02ac addi a1,sp,328 +80003162: 0000 unimp +80003164: 02ac addi a1,sp,328 +80003166: 0000 unimp +80003168: 0256 slli tp,tp,0x15 +8000316a: 0000 unimp +8000316c: 01be slli gp,gp,0xf +8000316e: 0000 unimp +80003170: 0000008f 0x8f +80003174: 00000137 lui sp,0x0 +80003178: 007d c.nop 31 +8000317a: 0000 unimp +8000317c: 00000137 lui sp,0x0 +80003180: 000002e7 jalr t0,zero +80003184: 000002e7 jalr t0,zero +80003188: 03a5 addi t2,t2,9 +8000318a: 0000 unimp +8000318c: 022d addi tp,tp,11 +8000318e: 0000 unimp +80003190: 031f 0000 022d 0x22d0000031f +80003196: 0000 unimp +80003198: 022d addi tp,tp,11 +8000319a: 0000 unimp +8000319c: 022d addi tp,tp,11 +8000319e: 0000 unimp +800031a0: 0229 addi tp,tp,10 +800031a2: 0000 unimp +800031a4: 031c addi a5,sp,384 +800031a6: 0000 unimp +800031a8: 0288 addi a0,sp,320 +800031aa: 0000 unimp +800031ac: 0288 addi a0,sp,320 +800031ae: 0000 unimp +800031b0: 0288 addi a0,sp,320 +800031b2: 0000 unimp +800031b4: 0000037b 0x37b +800031b8: 0000037b 0x37b +800031bc: 029a slli t0,t0,0x6 +800031be: 0000 unimp +800031c0: 011f 0000 0202 0x2020000011f +800031c6: 0000 unimp +800031c8: 0031 c.nop 12 +800031ca: 0000 unimp +800031cc: 0202 slli tp,tp,0x0 +800031ce: 0000 unimp +800031d0: 0056 c.slli zero,0x15 +800031d2: 0000 unimp +800031d4: 022d addi tp,tp,11 +800031d6: 0000 unimp +800031d8: 005f 0000 0355 0x3550000005f +800031de: 0000 unimp +800031e0: 01b9 addi gp,gp,14 +800031e2: 0000 unimp +800031e4: 01b9 addi gp,gp,14 +800031e6: 0000 unimp +800031e8: 01b9 addi gp,gp,14 +800031ea: 0000 unimp +800031ec: 01b8 addi a4,sp,200 +800031ee: 0000 unimp +800031f0: 0000024b fnmsub.s ft4,ft0,ft0,ft0,rne +800031f4: 0266 slli tp,tp,0x19 +800031f6: 0000 unimp +800031f8: 0266 slli tp,tp,0x19 +800031fa: 0000 unimp +800031fc: 018c addi a1,sp,192 +800031fe: 0000 unimp +80003200: 017e slli sp,sp,0x1f +80003202: 0000 unimp +80003204: 0118 addi a4,sp,128 +80003206: 0000 unimp +80003208: 0118 addi a4,sp,128 +8000320a: 0000 unimp +8000320c: 0011 c.nop 4 +8000320e: 0000 unimp +80003210: 0328 addi a0,sp,392 +80003212: 0000 unimp +80003214: 00aa slli ra,ra,0xa +80003216: 0000 unimp +80003218: 00000333 add t1,zero,zero +8000321c: 00000123 sb zero,2(zero) # 2 +80003220: 0158 addi a4,sp,132 +80003222: 0000 unimp +80003224: 0158 addi a4,sp,132 +80003226: 0000 unimp +80003228: 017c addi a5,sp,140 +8000322a: 0000 unimp +8000322c: 01c2 slli gp,gp,0x10 +8000322e: 0000 unimp +80003230: 0200 addi s0,sp,256 +80003232: 0000 unimp +80003234: 0200 addi s0,sp,256 +80003236: 0000 unimp +80003238: 0200 addi s0,sp,256 +8000323a: 0000 unimp +8000323c: 0395 addi t2,t2,5 +8000323e: 0000 unimp +80003240: 0395 addi t2,t2,5 +80003242: 0000 unimp +80003244: 0000021b 0x21b +80003248: 0000021b 0x21b +8000324c: 0328 addi a0,sp,392 +8000324e: 0000 unimp +80003250: 0372 slli t1,t1,0x1c +80003252: 0000 unimp +80003254: 00000377 0x377 +80003258: 0372 slli t1,t1,0x1c +8000325a: 0000 unimp +8000325c: 0219 addi tp,tp,6 +8000325e: 0000 unimp +80003260: 0219 addi tp,tp,6 +80003262: 0000 unimp +80003264: 0264 addi s1,sp,268 +80003266: 0000 unimp +80003268: 02bd addi t0,t0,15 +8000326a: 0000 unimp +8000326c: 02bd addi t0,t0,15 +8000326e: 0000 unimp +80003270: 02bd addi t0,t0,15 +80003272: 0000 unimp +80003274: 01df 0000 01df 0x1df000001df +8000327a: 0000 unimp +8000327c: 01df 0000 0237 0x237000001df +80003282: 0000 unimp +80003284: 00000097 auipc ra,0x0 +80003288: 0016 c.slli zero,0x5 +8000328a: 0000 unimp +8000328c: 0016 c.slli zero,0x5 +8000328e: 0000 unimp +80003290: 0238 addi a4,sp,264 +80003292: 0000 unimp +80003294: 0238 addi a4,sp,264 +80003296: 0000 unimp +80003298: 0238 addi a4,sp,264 +8000329a: 0000 unimp +8000329c: 0299 addi t0,t0,6 +8000329e: 0000 unimp +800032a0: 0299 addi t0,t0,6 +800032a2: 0000 unimp +800032a4: 000001a7 0x1a7 +800032a8: 000001a7 0x1a7 +800032ac: 01b2 slli gp,gp,0xc +800032ae: 0000 unimp +800032b0: 01b2 slli gp,gp,0xc +800032b2: 0000 unimp +800032b4: 0118 addi a4,sp,128 +800032b6: 0000 unimp +800032b8: 009e slli ra,ra,0x7 +800032ba: 0000 unimp +800032bc: 0118 addi a4,sp,128 +800032be: 0000 unimp +800032c0: 0054 addi a3,sp,4 +800032c2: 0000 unimp +800032c4: 0000018b 0x18b +800032c8: 000000f7 0xf7 +800032cc: 02b0 addi a2,sp,328 +800032ce: 0000 unimp +800032d0: 000000f7 0xf7 +800032d4: 01dc addi a5,sp,196 +800032d6: 0000 unimp +800032d8: 000001b3 add gp,zero,zero +800032dc: 01dc addi a5,sp,196 +800032de: 0000 unimp +800032e0: 0318 addi a4,sp,384 +800032e2: 0000 unimp +800032e4: 0318 addi a4,sp,384 +800032e6: 0000 unimp +800032e8: 0318 addi a4,sp,384 +800032ea: 0000 unimp +800032ec: 02d9 addi t0,t0,22 +800032ee: 0000 unimp +800032f0: 01e6 slli gp,gp,0x19 +800032f2: 0000 unimp +800032f4: 0109 addi sp,sp,2 +800032f6: 0000 unimp +800032f8: 019e slli gp,gp,0x7 +800032fa: 0000 unimp +800032fc: 00ec addi a1,sp,76 +800032fe: 0000 unimp +80003300: 0171 addi sp,sp,28 +80003302: 0000 unimp +80003304: 00ec addi a1,sp,76 +80003306: 0000 unimp +80003308: 0171 addi sp,sp,28 +8000330a: 0000 unimp +8000330c: 00d6 slli ra,ra,0x15 +8000330e: 0000 unimp +80003310: 0206 slli tp,tp,0x1 +80003312: 0000 unimp +80003314: 00b4 addi a3,sp,72 +80003316: 0000 unimp +80003318: 0206 slli tp,tp,0x1 +8000331a: 0000 unimp +8000331c: 000001f7 0x1f7 +80003320: 02aa slli t0,t0,0xa +80003322: 0000 unimp +80003324: 0254 addi a3,sp,260 +80003326: 0000 unimp +80003328: 0254 addi a3,sp,260 +8000332a: 0000 unimp +8000332c: 011c addi a5,sp,128 +8000332e: 0000 unimp +80003330: 0108 addi a0,sp,128 +80003332: 0000 unimp +80003334: 0108 addi a0,sp,128 +80003336: 0000 unimp +80003338: 000001f3 0x1f3 +8000333c: 000001f3 0x1f3 +80003340: 015a slli sp,sp,0x16 +80003342: 0000 unimp +80003344: 015a slli sp,sp,0x16 +80003346: 0000 unimp +80003348: 00000257 0x257 +8000334c: 00000257 0x257 +80003350: 000000d7 0xd7 +80003354: 000000d7 0xd7 +80003358: 000002db 0x2db +8000335c: 000002db 0x2db +80003360: 02b0 addi a2,sp,328 +80003362: 0000 unimp +80003364: 0292 slli t0,t0,0x4 +80003366: 0000 unimp +80003368: 0000026b 0x26b +8000336c: 000000fb 0xfb +80003370: 000000fb 0xfb +80003374: 00000083 lb ra,0(zero) # 0 +80003378: 0000022b 0x22b +8000337c: 0000022b 0x22b +80003380: 0000022b 0x22b +80003384: 0000029b 0x29b +80003388: 0210 addi a2,sp,256 +8000338a: 0000 unimp +8000338c: 0210 addi a2,sp,256 +8000338e: 0000 unimp +80003390: 0210 addi a2,sp,256 +80003392: 0000 unimp +80003394: 000001e7 jalr gp,zero +80003398: 000001e7 jalr gp,zero +8000339c: 000001e7 jalr gp,zero +800033a0: 02f1 addi t0,t0,28 +800033a2: 0000 unimp +800033a4: 02f1 addi t0,t0,28 +800033a6: 0000 unimp +800033a8: 011f 0000 011f 0x11f0000011f +800033ae: 0000 unimp +800033b0: 0272 slli tp,tp,0x1c +800033b2: 0000 unimp +800033b4: 0272 slli tp,tp,0x1c +800033b6: 0000 unimp +800033b8: 0130 addi a2,sp,136 +800033ba: 0000 unimp +800033bc: 000e c.slli zero,0x3 +800033be: 0000 unimp +800033c0: 0130 addi a2,sp,136 +800033c2: 0000 unimp +800033c4: 00000193 li gp,0 +800033c8: 02dd addi t0,t0,23 +800033ca: 0000 unimp +800033cc: 00000193 li gp,0 +800033d0: 02dd addi t0,t0,23 +800033d2: 0000 unimp +800033d4: 000002bf 000002bf 0x2bf000002bf +800033dc: 000002bf 000002d2 0x2d2000002bf +800033e4: 0332 slli t1,t1,0xc +800033e6: 0000 unimp +800033e8: 02d2 slli t0,t0,0x14 +800033ea: 0000 unimp +800033ec: 0196 slli gp,gp,0x5 +800033ee: 0000 unimp +800033f0: 0196 slli gp,gp,0x5 +800033f2: 0000 unimp +800033f4: 036a slli t1,t1,0x1a +800033f6: 0000 unimp +800033f8: 036a slli t1,t1,0x1a +800033fa: 0000 unimp +800033fc: 0358 addi a4,sp,388 +800033fe: 0000 unimp +80003400: 02ec addi a1,sp,332 +80003402: 0000 unimp +80003404: 02ec addi a1,sp,332 +80003406: 0000 unimp +80003408: 0000005b 0x5b +8000340c: 0056 c.slli zero,0x15 +8000340e: 0000 unimp +80003410: 0000005b 0x5b +80003414: 017a slli sp,sp,0x1e +80003416: 0000 unimp +80003418: 017a slli sp,sp,0x1e +8000341a: 0000 unimp +8000341c: 0294 addi a3,sp,320 +8000341e: 0000 unimp +80003420: 0069 c.nop 26 +80003422: 0000 unimp +80003424: 0099 addi ra,ra,6 +80003426: 0000 unimp +80003428: 0099 addi ra,ra,6 +8000342a: 0000 unimp +8000342c: 0099 addi ra,ra,6 +8000342e: 0000 unimp +80003430: 017d addi sp,sp,31 +80003432: 0000 unimp +80003434: 0079 c.nop 30 +80003436: 0000 unimp +80003438: 0000028b 0x28b +8000343c: 019c addi a5,sp,192 +8000343e: 0000 unimp +80003440: 0339 addi t1,t1,14 +80003442: 0000 unimp +80003444: 019c addi a5,sp,192 +80003446: 0000 unimp +80003448: 0164 addi s1,sp,140 +8000344a: 0000 unimp +8000344c: 00ec addi a1,sp,76 +8000344e: 0000 unimp +80003450: 0094 addi a3,sp,64 +80003452: 0000 unimp +80003454: 0094 addi a3,sp,64 +80003456: 0000 unimp +80003458: 0094 addi a3,sp,64 +8000345a: 0000 unimp +8000345c: 000001a7 0x1a7 +80003460: 008c addi a1,sp,64 +80003462: 0000 unimp +80003464: 00d8 addi a4,sp,68 +80003466: 0000 unimp +80003468: 00d8 addi a4,sp,68 +8000346a: 0000 unimp +8000346c: 026d addi tp,tp,27 +8000346e: 0000 unimp +80003470: 026d addi tp,tp,27 +80003472: 0000 unimp +80003474: 0169 addi sp,sp,26 +80003476: 0000 unimp +80003478: 0000 unimp +8000347a: 0000 unimp diff --git a/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.riscv b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.riscv new file mode 100755 index 0000000..b623cc4 Binary files /dev/null and b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.riscv differ diff --git a/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.sid_0.pkl b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.sid_0.pkl new file mode 100644 index 0000000..482c0e3 Binary files /dev/null and b/analyzer/expdir/ctest/median-stream/Scratchpad512KBRV32Config/median-stream.sid_0.pkl differ diff --git a/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.dump.annot b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.dump.annot new file mode 100644 index 0000000..f555670 --- /dev/null +++ b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.dump.annot @@ -0,0 +1,4202 @@ + +noise.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 00005197 auipc gp,0x5 +800000b0: 87418193 addi gp,gp,-1932 # 80004920 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 89f18213 addi tp,gp,-1889 # 800041bf <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 1690106f j 80001a44 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 218010ef jal ra,80001384 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048
: +volatile float * float_in = (volatile float *)0x81000000; +volatile float * float_out = (volatile float *)0x82000000; + + +int main() +{ +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01412623 sw s4,12(sp) +80001060: 01512423 sw s5,8(sp) + // setStats(1); + for (int i = 0; i < ITERS; i++) { +80001064: 00000413 li s0,0 +80001068: 0940006f j 800010fc +magic_start_stamp(0) +8000106c: 0efff497 auipc s1,0xefff +80001070: f9448493 addi s1,s1,-108 # 8f000000 +80001074: 149a07b7 lui a5,0x149a0 +80001078: 00178793 addi a5,a5,1 # 149a0001 +8000107c: 00f4a023 sw a5,0(s1) + // begin + *float_out = (*float_in) + (rand()/(float)RAND_MAX) * 0.2; +80001080: 81018793 addi a5,gp,-2032 # 80004130 +80001084: 0007a783 lw a5,0(a5) +80001088: 0007a503 lw a0,0(a5) +8000108c: 5c4020ef jal ra,80003650 <__extendsfdf2> +80001090: 00050a13 mv s4,a0 +80001094: 00058a93 mv s5,a1 +80001098: 0b9020ef jal ra,80003950 +8000109c: 490020ef jal ra,8000352c <__floatsisf> +800010a0: 00003797 auipc a5,0x3 +800010a4: 08878793 addi a5,a5,136 # 80004128 +800010a8: 0007a583 lw a1,0(a5) +800010ac: 160020ef jal ra,8000320c <__mulsf3> +800010b0: 5a0020ef jal ra,80003650 <__extendsfdf2> +800010b4: 00003797 auipc a5,0x3 +800010b8: 06c78793 addi a5,a5,108 # 80004120 +800010bc: 0007a603 lw a2,0(a5) +800010c0: 0047a683 lw a3,4(a5) +800010c4: 371010ef jal ra,80002c34 <__muldf3> +800010c8: 80c18793 addi a5,gp,-2036 # 8000412c +800010cc: 0007a903 lw s2,0(a5) +800010d0: 00050613 mv a2,a0 +800010d4: 00058693 mv a3,a1 +800010d8: 000a0513 mv a0,s4 +800010dc: 000a8593 mv a1,s5 +800010e0: 34c010ef jal ra,8000242c <__adddf3> +800010e4: 678020ef jal ra,8000375c <__truncdfsf2> +800010e8: 00a92023 sw a0,0(s2) + // end +magic_end_stamp(0) +800010ec: 249a07b7 lui a5,0x249a0 +800010f0: 00178793 addi a5,a5,1 # 249a0001 +800010f4: 00f4a023 sw a5,0(s1) + for (int i = 0; i < ITERS; i++) { +800010f8: 00140413 addi s0,s0,1 +800010fc: 3e700793 li a5,999 +80001100: f687d6e3 ble s0,a5,8000106c + } + // setStats(0); + return 0; +80001104: 00000513 li a0,0 +80001108: 01c12083 lw ra,28(sp) +8000110c: 01812403 lw s0,24(sp) +80001110: 01412483 lw s1,20(sp) +80001114: 01012903 lw s2,16(sp) +80001118: 00c12a03 lw s4,12(sp) +8000111c: 00812a83 lw s5,8(sp) +80001120: 02010113 addi sp,sp,32 +80001124: 00008067 ret + +80001128 : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001128: 00100793 li a5,1 +8000112c: 02b7d263 ble a1,a5,80001150 + return va_arg(*ap, unsigned long long); +80001130: 00052783 lw a5,0(a0) +80001134: 00778793 addi a5,a5,7 +80001138: ff87f793 andi a5,a5,-8 +8000113c: 00878713 addi a4,a5,8 +80001140: 00e52023 sw a4,0(a0) +80001144: 0007a503 lw a0,0(a5) +80001148: 0047a583 lw a1,4(a5) +8000114c: 00008067 ret + else if (lflag) +80001150: 00059e63 bnez a1,8000116c + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80001154: 00052783 lw a5,0(a0) +80001158: 00478713 addi a4,a5,4 +8000115c: 00e52023 sw a4,0(a0) +80001160: 0007a503 lw a0,0(a5) +80001164: 00000593 li a1,0 +} +80001168: 00008067 ret + return va_arg(*ap, unsigned long); +8000116c: 00052783 lw a5,0(a0) +80001170: 00478713 addi a4,a5,4 +80001174: 00e52023 sw a4,0(a0) +80001178: 0007a503 lw a0,0(a5) +8000117c: 00000593 li a1,0 +80001180: 00008067 ret + +80001184 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80001184: 00100793 li a5,1 +80001188: 02b7d263 ble a1,a5,800011ac + return va_arg(*ap, long long); +8000118c: 00052783 lw a5,0(a0) +80001190: 00778793 addi a5,a5,7 +80001194: ff87f793 andi a5,a5,-8 +80001198: 00878713 addi a4,a5,8 +8000119c: 00e52023 sw a4,0(a0) +800011a0: 0007a503 lw a0,0(a5) +800011a4: 0047a583 lw a1,4(a5) +800011a8: 00008067 ret + else if (lflag) +800011ac: 00059e63 bnez a1,800011c8 + return va_arg(*ap, long); + else + return va_arg(*ap, int); +800011b0: 00052783 lw a5,0(a0) +800011b4: 00478713 addi a4,a5,4 +800011b8: 00e52023 sw a4,0(a0) +800011bc: 0007a503 lw a0,0(a5) +800011c0: 41f55593 srai a1,a0,0x1f +} +800011c4: 00008067 ret + return va_arg(*ap, long); +800011c8: 00052783 lw a5,0(a0) +800011cc: 00478713 addi a4,a5,4 +800011d0: 00e52023 sw a4,0(a0) +800011d4: 0007a503 lw a0,0(a5) +800011d8: 41f55593 srai a1,a0,0x1f +800011dc: 00008067 ret + +800011e0 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800011e0: 0005a783 lw a5,0(a1) +800011e4: 00a78023 sb a0,0(a5) + (*pstr)++; +800011e8: 0005a783 lw a5,0(a1) +800011ec: 00178793 addi a5,a5,1 +800011f0: 00f5a023 sw a5,0(a1) + } +800011f4: 00008067 ret + +800011f8 : +{ +800011f8: f8010113 addi sp,sp,-128 +800011fc: 00060e93 mv t4,a2 +80001200: 00070393 mv t2,a4 +80001204: 00080893 mv a7,a6 +80001208: 00078813 mv a6,a5 +8000120c: 03f10613 addi a2,sp,63 +80001210: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +80001214: 00000793 li a5,0 +80001218: 00a62023 sw a0,0(a2) +8000121c: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +80001220: 00b62423 sw a1,8(a2) +80001224: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +80001228: 00d62823 sw a3,16(a2) +8000122c: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80001230: 01062c23 sw a6,24(a2) +80001234: 01162e23 sw a7,28(a2) + __sync_synchronize(); +80001238: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +8000123c: 00000793 li a5,0 +80001240: 00000697 auipc a3,0x0 +80001244: dc068693 addi a3,a3,-576 # 80001000 +80001248: 00c6a023 sw a2,0(a3) +8000124c: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80001250: 00000797 auipc a5,0x0 +80001254: df078793 addi a5,a5,-528 # 80001040 +80001258: 0007a703 lw a4,0(a5) +8000125c: 0047a783 lw a5,4(a5) +80001260: 00f76733 or a4,a4,a5 +80001264: fe0706e3 beqz a4,80001250 + fromhost = 0; +80001268: 00000797 auipc a5,0x0 +8000126c: dd878793 addi a5,a5,-552 # 80001040 +80001270: 00000693 li a3,0 +80001274: 00000713 li a4,0 +80001278: 00d7a023 sw a3,0(a5) +8000127c: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80001280: 0ff0000f fence + return magic_mem[0]; +80001284: 00062503 lw a0,0(a2) +80001288: 00462583 lw a1,4(a2) +} +8000128c: 08010113 addi sp,sp,128 +80001290: 00008067 ret + +80001294 : + buf[buflen++] = ch; +80001294: 00022703 lw a4,0(tp) # 0 +80001298: 00170813 addi a6,a4,1 +8000129c: 01022023 sw a6,0(tp) # 0 +800012a0: 04020793 addi a5,tp,64 # 40 +800012a4: 00f707b3 add a5,a4,a5 +800012a8: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +800012ac: 00a00793 li a5,10 +800012b0: 00f50a63 beq a0,a5,800012c4 +800012b4: 00400793 li a5,4 +800012b8: 00f80663 beq a6,a5,800012c4 +} +800012bc: 00000513 li a0,0 +800012c0: 00008067 ret +{ +800012c4: ff010113 addi sp,sp,-16 +800012c8: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800012cc: 00080793 mv a5,a6 +800012d0: 41f85813 srai a6,a6,0x1f +800012d4: 04020693 addi a3,tp,64 # 40 +800012d8: 00000713 li a4,0 +800012dc: 00100593 li a1,1 +800012e0: 00000613 li a2,0 +800012e4: 04000513 li a0,64 +800012e8: f11ff0ef jal ra,800011f8 + buflen = 0; +800012ec: 00022023 sw zero,0(tp) # 0 +} +800012f0: 00000513 li a0,0 +800012f4: 00c12083 lw ra,12(sp) +800012f8: 01010113 addi sp,sp,16 +800012fc: 00008067 ret + +80001300 : + READ_CTR(mcycle); +80001300: b00027f3 csrr a5,mcycle +80001304: 02051263 bnez a0,80001328 +80001308: 00003717 auipc a4,0x3 +8000130c: e4070713 addi a4,a4,-448 # 80004148 +80001310: 00072703 lw a4,0(a4) +80001314: 40e787b3 sub a5,a5,a4 +80001318: 00003717 auipc a4,0x3 +8000131c: 96070713 addi a4,a4,-1696 # 80003c78 <__clz_tab+0x100> +80001320: 00003697 auipc a3,0x3 +80001324: e2e6a023 sw a4,-480(a3) # 80004140 +80001328: 00003717 auipc a4,0x3 +8000132c: e2f72023 sw a5,-480(a4) # 80004148 + READ_CTR(minstret); +80001330: b02027f3 csrr a5,minstret +80001334: 02051263 bnez a0,80001358 +80001338: 00003717 auipc a4,0x3 +8000133c: e1070713 addi a4,a4,-496 # 80004148 +80001340: 00472703 lw a4,4(a4) +80001344: 40e787b3 sub a5,a5,a4 +80001348: 00003717 auipc a4,0x3 +8000134c: 93870713 addi a4,a4,-1736 # 80003c80 <__clz_tab+0x108> +80001350: 00003697 auipc a3,0x3 +80001354: dee6aa23 sw a4,-524(a3) # 80004144 +80001358: 00003717 auipc a4,0x3 +8000135c: def72a23 sw a5,-524(a4) # 8000414c +} +80001360: 00008067 ret + +80001364 : + tohost = (code << 1) | 1; +80001364: 00151513 slli a0,a0,0x1 +80001368: 00156713 ori a4,a0,1 +8000136c: 00000793 li a5,0 +80001370: 00000697 auipc a3,0x0 +80001374: c9068693 addi a3,a3,-880 # 80001000 +80001378: 00e6a023 sw a4,0(a3) +8000137c: 00f6a223 sw a5,4(a3) +80001380: 0000006f j 80001380 + +80001384 : +{ +80001384: ff010113 addi sp,sp,-16 +80001388: 00112623 sw ra,12(sp) + tohost_exit(1337); +8000138c: 53900513 li a0,1337 +80001390: fd5ff0ef jal ra,80001364 + +80001394 : +{ +80001394: ff010113 addi sp,sp,-16 +80001398: 00112623 sw ra,12(sp) + tohost_exit(code); +8000139c: fc9ff0ef jal ra,80001364 + +800013a0 : +{ +800013a0: ff010113 addi sp,sp,-16 +800013a4: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +800013a8: 08600513 li a0,134 +800013ac: fe9ff0ef jal ra,80001394 + +800013b0 : + while (cid != 0); +800013b0: 00051063 bnez a0,800013b0 +} +800013b4: 00008067 ret + +800013b8 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +800013b8: 00b567b3 or a5,a0,a1 +800013bc: 00c7e7b3 or a5,a5,a2 +800013c0: 0037f793 andi a5,a5,3 +800013c4: 02078463 beqz a5,800013ec + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +800013c8: 00050793 mv a5,a0 +800013cc: 0380006f j 80001404 + *d++ = *s++; +800013d0: 0005a703 lw a4,0(a1) +800013d4: 00e7a023 sw a4,0(a5) +800013d8: 00478793 addi a5,a5,4 +800013dc: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +800013e0: 00c50733 add a4,a0,a2 +800013e4: fee7e6e3 bltu a5,a4,800013d0 +800013e8: 00008067 ret + uintptr_t *d = dest; +800013ec: 00050793 mv a5,a0 +800013f0: ff1ff06f j 800013e0 + while (d < (char*)(dest + len)) + *d++ = *s++; +800013f4: 0005c703 lbu a4,0(a1) +800013f8: 00e78023 sb a4,0(a5) +800013fc: 00178793 addi a5,a5,1 +80001400: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +80001404: 00c50733 add a4,a0,a2 +80001408: fee7e6e3 bltu a5,a4,800013f4 + } + return dest; +} +8000140c: 00008067 ret + +80001410 : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +80001410: 00c567b3 or a5,a0,a2 +80001414: 0037f793 andi a5,a5,3 +80001418: 04079463 bnez a5,80001460 + uintptr_t word = byte & 0xFF; +8000141c: 0ff5f593 andi a1,a1,255 + word |= word << 8; +80001420: 00859793 slli a5,a1,0x8 +80001424: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +80001428: 01079593 slli a1,a5,0x10 +8000142c: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +80001430: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +80001434: 00c0006f j 80001440 + *d++ = word; +80001438: 00b7a023 sw a1,0(a5) +8000143c: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +80001440: 00c50733 add a4,a0,a2 +80001444: fee7eae3 bltu a5,a4,80001438 +80001448: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +8000144c: 00b78023 sb a1,0(a5) +80001450: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80001454: 00c50733 add a4,a0,a2 +80001458: fee7eae3 bltu a5,a4,8000144c + } + return dest; +} +8000145c: 00008067 ret + char *d = dest; +80001460: 00050793 mv a5,a0 +80001464: ff1ff06f j 80001454 + +80001468 : +{ +80001468: ff010113 addi sp,sp,-16 +8000146c: 00112623 sw ra,12(sp) +80001470: 00812423 sw s0,8(sp) +80001474: 00912223 sw s1,4(sp) +80001478: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +8000147c: 00003497 auipc s1,0x3 +80001480: cd448493 addi s1,s1,-812 # 80004150 <_tdata_begin> +80001484: 00003597 auipc a1,0x3 +80001488: ccc58593 addi a1,a1,-820 # 80004150 <_tdata_begin> +8000148c: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80001490: 00020913 mv s2,tp +80001494: 00040613 mv a2,s0 +80001498: 00020513 mv a0,tp +8000149c: f1dff0ef jal ra,800013b8 + memset(thread_pointer + tdata_size, 0, tbss_size); +800014a0: 8a418613 addi a2,gp,-1884 # 800041c4 <_tbss_end> +800014a4: 40960633 sub a2,a2,s1 +800014a8: 00000593 li a1,0 +800014ac: 00890533 add a0,s2,s0 +800014b0: f61ff0ef jal ra,80001410 +} +800014b4: 00c12083 lw ra,12(sp) +800014b8: 00812403 lw s0,8(sp) +800014bc: 00412483 lw s1,4(sp) +800014c0: 00012903 lw s2,0(sp) +800014c4: 01010113 addi sp,sp,16 +800014c8: 00008067 ret + +800014cc : + +size_t strlen(const char *s) +{ + const char *p = s; +800014cc: 00050793 mv a5,a0 + while (*p) +800014d0: 0080006f j 800014d8 + p++; +800014d4: 00178793 addi a5,a5,1 + while (*p) +800014d8: 0007c703 lbu a4,0(a5) +800014dc: fe071ce3 bnez a4,800014d4 + return p - s; +} +800014e0: 40a78533 sub a0,a5,a0 +800014e4: 00008067 ret + +800014e8 : +{ +800014e8: ff010113 addi sp,sp,-16 +800014ec: 00112623 sw ra,12(sp) +800014f0: 00812423 sw s0,8(sp) +800014f4: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800014f8: fd5ff0ef jal ra,800014cc +800014fc: 00050793 mv a5,a0 +80001500: 00000813 li a6,0 +80001504: 00040693 mv a3,s0 +80001508: 00000713 li a4,0 +8000150c: 00100593 li a1,1 +80001510: 00000613 li a2,0 +80001514: 04000513 li a0,64 +80001518: ce1ff0ef jal ra,800011f8 +} +8000151c: 00c12083 lw ra,12(sp) +80001520: 00812403 lw s0,8(sp) +80001524: 01010113 addi sp,sp,16 +80001528: 00008067 ret +{ +8000152c: ff010113 addi sp,sp,-16 +80001530: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +80001534: 00002517 auipc a0,0x2 +80001538: 75850513 addi a0,a0,1880 # 80003c8c <__clz_tab+0x114> +8000153c: fadff0ef jal ra,800014e8 +} +80001540: fff00513 li a0,-1 +80001544: 00c12083 lw ra,12(sp) +80001548: 01010113 addi sp,sp,16 +8000154c: 00008067 ret + +80001550 : +{ +80001550: fd010113 addi sp,sp,-48 +80001554: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +80001558: 00000713 li a4,0 +8000155c: 0340006f j 80001590 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80001560: 05700613 li a2,87 +80001564: 00f00793 li a5,15 +80001568: 40e787b3 sub a5,a5,a4 +8000156c: 00c686b3 add a3,a3,a2 +80001570: 02010613 addi a2,sp,32 +80001574: 00f607b3 add a5,a2,a5 +80001578: fed78623 sb a3,-20(a5) + x >>= 4; +8000157c: 01c59793 slli a5,a1,0x1c +80001580: 00455513 srli a0,a0,0x4 +80001584: 00a7e533 or a0,a5,a0 +80001588: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +8000158c: 00170713 addi a4,a4,1 +80001590: 00f00793 li a5,15 +80001594: 00e7cc63 blt a5,a4,800015ac + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80001598: 00f57693 andi a3,a0,15 +8000159c: 00900613 li a2,9 +800015a0: fcd660e3 bltu a2,a3,80001560 +800015a4: 03000613 li a2,48 +800015a8: fbdff06f j 80001564 + str[16] = 0; +800015ac: 00010e23 sb zero,28(sp) + printstr(str); +800015b0: 00c10513 addi a0,sp,12 +800015b4: f35ff0ef jal ra,800014e8 +} +800015b8: 02c12083 lw ra,44(sp) +800015bc: 03010113 addi sp,sp,48 +800015c0: 00008067 ret + +800015c4 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +800015c4: 00050793 mv a5,a0 + while (n-- && *p) +800015c8: 00c0006f j 800015d4 + p++; +800015cc: 00178793 addi a5,a5,1 + while (n-- && *p) +800015d0: 00070593 mv a1,a4 +800015d4: fff58713 addi a4,a1,-1 +800015d8: 00058663 beqz a1,800015e4 +800015dc: 0007c683 lbu a3,0(a5) +800015e0: fe0696e3 bnez a3,800015cc + return p - s; +} +800015e4: 40a78533 sub a0,a5,a0 +800015e8: 00008067 ret + +800015ec : +{ +800015ec: ec010113 addi sp,sp,-320 +800015f0: 12112e23 sw ra,316(sp) +800015f4: 12812c23 sw s0,312(sp) +800015f8: 12912a23 sw s1,308(sp) +800015fc: 13212823 sw s2,304(sp) +80001600: 13312623 sw s3,300(sp) +80001604: 13412423 sw s4,296(sp) +80001608: 13512223 sw s5,292(sp) +8000160c: 13612023 sw s6,288(sp) +80001610: 11712e23 sw s7,284(sp) +80001614: 11812c23 sw s8,280(sp) +80001618: 11912a23 sw s9,276(sp) +8000161c: 11a12823 sw s10,272(sp) +80001620: 00050993 mv s3,a0 +80001624: 00058913 mv s2,a1 +80001628: 00060413 mv s0,a2 +8000162c: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +80001630: 00044503 lbu a0,0(s0) +80001634: 02500793 li a5,37 +80001638: 00f50c63 beq a0,a5,80001650 + if (ch == '\0') +8000163c: 30050c63 beqz a0,80001954 + fmt++; +80001640: 00140413 addi s0,s0,1 + putch(ch, putdat); +80001644: 00090593 mv a1,s2 +80001648: 000980e7 jalr s3 +8000164c: fe5ff06f j 80001630 + fmt++; +80001650: 00140a13 addi s4,s0,1 +80001654: 000a0793 mv a5,s4 + padc = ' '; +80001658: 02000c93 li s9,32 + precision = -1; +8000165c: fff00493 li s1,-1 + width = -1; +80001660: fff00b93 li s7,-1 + lflag = 0; +80001664: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +80001668: 00178413 addi s0,a5,1 +8000166c: 0007c503 lbu a0,0(a5) +80001670: fdd50793 addi a5,a0,-35 +80001674: 0ff7f693 andi a3,a5,255 +80001678: 05500713 li a4,85 +8000167c: 2cd76263 bltu a4,a3,80001940 +80001680: 00269793 slli a5,a3,0x2 +80001684: 00002717 auipc a4,0x2 +80001688: 32470713 addi a4,a4,804 # 800039a8 +8000168c: 00e787b3 add a5,a5,a4 +80001690: 0007a783 lw a5,0(a5) +80001694: 00e787b3 add a5,a5,a4 +80001698: 00078067 jr a5 +8000169c: 00040793 mv a5,s0 + padc = '-'; +800016a0: 02d00c93 li s9,45 +800016a4: fc5ff06f j 80001668 + switch (ch = *(unsigned char *) fmt++) { +800016a8: 00040793 mv a5,s0 + padc = '0'; +800016ac: 03000c93 li s9,48 +800016b0: fb9ff06f j 80001668 + switch (ch = *(unsigned char *) fmt++) { +800016b4: 00040793 mv a5,s0 + width = 0; +800016b8: 00000b93 li s7,0 +800016bc: fadff06f j 80001668 + base = 10; +800016c0: 00a00c13 li s8,10 +800016c4: 1a40006f j 80001868 + for (precision = 0; ; ++fmt) { +800016c8: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +800016cc: 00249793 slli a5,s1,0x2 +800016d0: 009784b3 add s1,a5,s1 +800016d4: 00149793 slli a5,s1,0x1 +800016d8: 00a78533 add a0,a5,a0 +800016dc: fd050493 addi s1,a0,-48 + ch = *fmt; +800016e0: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +800016e4: fd050713 addi a4,a0,-48 +800016e8: 00900793 li a5,9 +800016ec: 04e7e263 bltu a5,a4,80001730 + for (precision = 0; ; ++fmt) { +800016f0: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800016f4: fd9ff06f j 800016cc + precision = va_arg(ap, int); +800016f8: 00c12783 lw a5,12(sp) +800016fc: 00478713 addi a4,a5,4 +80001700: 00e12623 sw a4,12(sp) +80001704: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +80001708: 00040793 mv a5,s0 + if (width < 0) +8000170c: f40bdee3 bgez s7,80001668 + width = precision, precision = -1; +80001710: 00048b93 mv s7,s1 +80001714: fff00493 li s1,-1 +80001718: f51ff06f j 80001668 + if (width < 0) +8000171c: f80bcce3 bltz s7,800016b4 + switch (ch = *(unsigned char *) fmt++) { +80001720: 00040793 mv a5,s0 +80001724: f45ff06f j 80001668 +80001728: 00040793 mv a5,s0 + goto reswitch; +8000172c: f3dff06f j 80001668 +80001730: 00040793 mv a5,s0 +80001734: fd9ff06f j 8000170c + lflag++; +80001738: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +8000173c: 00040793 mv a5,s0 + goto reswitch; +80001740: f29ff06f j 80001668 + putch(va_arg(ap, int), putdat); +80001744: 00c12783 lw a5,12(sp) +80001748: 00478713 addi a4,a5,4 +8000174c: 00e12623 sw a4,12(sp) +80001750: 00090593 mv a1,s2 +80001754: 0007a503 lw a0,0(a5) +80001758: 000980e7 jalr s3 + break; +8000175c: ed5ff06f j 80001630 + if ((p = va_arg(ap, char *)) == NULL) +80001760: 00c12783 lw a5,12(sp) +80001764: 00478713 addi a4,a5,4 +80001768: 00e12623 sw a4,12(sp) +8000176c: 0007aa03 lw s4,0(a5) +80001770: 020a0263 beqz s4,80001794 + if (width > 0 && padc != '-') +80001774: 05705a63 blez s7,800017c8 +80001778: 02d00793 li a5,45 +8000177c: 04fc8663 beq s9,a5,800017c8 + for (width -= strnlen(p, precision); width > 0; width--) +80001780: 00048593 mv a1,s1 +80001784: 000a0513 mv a0,s4 +80001788: e3dff0ef jal ra,800015c4 +8000178c: 40ab8bb3 sub s7,s7,a0 +80001790: 0200006f j 800017b0 + p = "(null)"; +80001794: 00002a17 auipc s4,0x2 +80001798: 510a0a13 addi s4,s4,1296 # 80003ca4 <__clz_tab+0x12c> +8000179c: fd9ff06f j 80001774 + putch(padc, putdat); +800017a0: 00090593 mv a1,s2 +800017a4: 000c8513 mv a0,s9 +800017a8: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +800017ac: fffb8b93 addi s7,s7,-1 +800017b0: ff7048e3 bgtz s7,800017a0 +800017b4: 0140006f j 800017c8 + putch(ch, putdat); +800017b8: 00090593 mv a1,s2 +800017bc: 000980e7 jalr s3 + p++; +800017c0: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +800017c4: fffb8b93 addi s7,s7,-1 +800017c8: 000a4503 lbu a0,0(s4) +800017cc: 00050863 beqz a0,800017dc +800017d0: fe04c4e3 bltz s1,800017b8 +800017d4: fff48493 addi s1,s1,-1 +800017d8: fe04d0e3 bgez s1,800017b8 + for (; width > 0; width--) +800017dc: e5705ae3 blez s7,80001630 + putch(' ', putdat); +800017e0: 00090593 mv a1,s2 +800017e4: 02000513 li a0,32 +800017e8: 000980e7 jalr s3 + for (; width > 0; width--) +800017ec: fffb8b93 addi s7,s7,-1 +800017f0: fedff06f j 800017dc + num = getint(&ap, lflag); +800017f4: 00c10513 addi a0,sp,12 +800017f8: 98dff0ef jal ra,80001184 +800017fc: 00050493 mv s1,a0 +80001800: 00058a13 mv s4,a1 +80001804: 00050b13 mv s6,a0 +80001808: 00058a93 mv s5,a1 + if ((long long) num < 0) { +8000180c: 0c05d063 bgez a1,800018cc + putch('-', putdat); +80001810: 00090593 mv a1,s2 +80001814: 02d00513 li a0,45 +80001818: 000980e7 jalr s3 + num = -(long long) num; +8000181c: 00000793 li a5,0 +80001820: 40978b33 sub s6,a5,s1 +80001824: 01603ab3 snez s5,s6 +80001828: 414787b3 sub a5,a5,s4 +8000182c: 41578ab3 sub s5,a5,s5 + base = 10; +80001830: 00a00c13 li s8,10 +80001834: 0440006f j 80001878 + base = 8; +80001838: 00800c13 li s8,8 + goto unsigned_number; +8000183c: 02c0006f j 80001868 + putch('0', putdat); +80001840: 00090593 mv a1,s2 +80001844: 03000513 li a0,48 +80001848: 000980e7 jalr s3 + putch('x', putdat); +8000184c: 00090593 mv a1,s2 +80001850: 07800513 li a0,120 +80001854: 000980e7 jalr s3 + lflag = 1; +80001858: 00100593 li a1,1 + base = 16; +8000185c: 01000c13 li s8,16 +80001860: 0080006f j 80001868 +80001864: 01000c13 li s8,16 + num = getuint(&ap, lflag); +80001868: 00c10513 addi a0,sp,12 +8000186c: 8bdff0ef jal ra,80001128 +80001870: 00050b13 mv s6,a0 +80001874: 00058a93 mv s5,a1 + int pos = 0; +80001878: 00000493 li s1,0 + digs[pos++] = num % base; +8000187c: 000c0613 mv a2,s8 +80001880: 00000693 li a3,0 +80001884: 000b0513 mv a0,s6 +80001888: 000a8593 mv a1,s5 +8000188c: 790000ef jal ra,8000201c <__umoddi3> +80001890: 00148a13 addi s4,s1,1 +80001894: 00249493 slli s1,s1,0x2 +80001898: 11010793 addi a5,sp,272 +8000189c: 009784b3 add s1,a5,s1 +800018a0: f0a4a023 sw a0,-256(s1) + if (num < base) +800018a4: 020a8863 beqz s5,800018d4 + num /= base; +800018a8: 000c0613 mv a2,s8 +800018ac: 00000693 li a3,0 +800018b0: 000b0513 mv a0,s6 +800018b4: 000a8593 mv a1,s5 +800018b8: 330000ef jal ra,80001be8 <__udivdi3> +800018bc: 00050b13 mv s6,a0 +800018c0: 00058a93 mv s5,a1 + digs[pos++] = num % base; +800018c4: 000a0493 mv s1,s4 +800018c8: fb5ff06f j 8000187c + base = 10; +800018cc: 00a00c13 li s8,10 +800018d0: fa9ff06f j 80001878 + if (num < base) +800018d4: fd8b7ae3 bleu s8,s6,800018a8 +800018d8: 0140006f j 800018ec + putch(padc, putdat); +800018dc: 00090593 mv a1,s2 +800018e0: 000c8513 mv a0,s9 +800018e4: 000980e7 jalr s3 + while (width-- > pos) +800018e8: 00048b93 mv s7,s1 +800018ec: fffb8493 addi s1,s7,-1 +800018f0: ff7a46e3 blt s4,s7,800018dc +800018f4: 0180006f j 8000190c + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800018f8: 03000513 li a0,48 +800018fc: 00090593 mv a1,s2 +80001900: 00a78533 add a0,a5,a0 +80001904: 000980e7 jalr s3 + while (pos-- > 0) +80001908: 00048a13 mv s4,s1 +8000190c: fffa0493 addi s1,s4,-1 +80001910: d34050e3 blez s4,80001630 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +80001914: 00249793 slli a5,s1,0x2 +80001918: 11010713 addi a4,sp,272 +8000191c: 00f707b3 add a5,a4,a5 +80001920: f007a783 lw a5,-256(a5) +80001924: 00900713 li a4,9 +80001928: fcf778e3 bleu a5,a4,800018f8 +8000192c: 05700513 li a0,87 +80001930: fcdff06f j 800018fc + putch(ch, putdat); +80001934: 00090593 mv a1,s2 +80001938: 000980e7 jalr s3 + break; +8000193c: cf5ff06f j 80001630 + putch('%', putdat); +80001940: 00090593 mv a1,s2 +80001944: 02500513 li a0,37 +80001948: 000980e7 jalr s3 + fmt = last_fmt; +8000194c: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80001950: ce1ff06f j 80001630 +} +80001954: 13c12083 lw ra,316(sp) +80001958: 13812403 lw s0,312(sp) +8000195c: 13412483 lw s1,308(sp) +80001960: 13012903 lw s2,304(sp) +80001964: 12c12983 lw s3,300(sp) +80001968: 12812a03 lw s4,296(sp) +8000196c: 12412a83 lw s5,292(sp) +80001970: 12012b03 lw s6,288(sp) +80001974: 11c12b83 lw s7,284(sp) +80001978: 11812c03 lw s8,280(sp) +8000197c: 11412c83 lw s9,276(sp) +80001980: 11012d03 lw s10,272(sp) +80001984: 14010113 addi sp,sp,320 +80001988: 00008067 ret + +8000198c : +{ +8000198c: fc010113 addi sp,sp,-64 +80001990: 00112e23 sw ra,28(sp) +80001994: 02b12223 sw a1,36(sp) +80001998: 02c12423 sw a2,40(sp) +8000199c: 02d12623 sw a3,44(sp) +800019a0: 02e12823 sw a4,48(sp) +800019a4: 02f12a23 sw a5,52(sp) +800019a8: 03012c23 sw a6,56(sp) +800019ac: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +800019b0: 02410693 addi a3,sp,36 +800019b4: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +800019b8: 00050613 mv a2,a0 +800019bc: 00000593 li a1,0 +800019c0: 00000517 auipc a0,0x0 +800019c4: 8d450513 addi a0,a0,-1836 # 80001294 +800019c8: c25ff0ef jal ra,800015ec +} +800019cc: 00000513 li a0,0 +800019d0: 01c12083 lw ra,28(sp) +800019d4: 04010113 addi sp,sp,64 +800019d8: 00008067 ret + +800019dc : +{ +800019dc: fb010113 addi sp,sp,-80 +800019e0: 02112623 sw ra,44(sp) +800019e4: 02812423 sw s0,40(sp) +800019e8: 00a12623 sw a0,12(sp) +800019ec: 02c12c23 sw a2,56(sp) +800019f0: 02d12e23 sw a3,60(sp) +800019f4: 04e12023 sw a4,64(sp) +800019f8: 04f12223 sw a5,68(sp) +800019fc: 05012423 sw a6,72(sp) +80001a00: 05112623 sw a7,76(sp) + char* str0 = str; +80001a04: 00050413 mv s0,a0 + va_start(ap, fmt); +80001a08: 03810693 addi a3,sp,56 +80001a0c: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +80001a10: 00058613 mv a2,a1 +80001a14: 00c10593 addi a1,sp,12 +80001a18: fffff517 auipc a0,0xfffff +80001a1c: 7c850513 addi a0,a0,1992 # 800011e0 +80001a20: bcdff0ef jal ra,800015ec + *str = 0; +80001a24: 00c12783 lw a5,12(sp) +80001a28: 00078023 sb zero,0(a5) +} +80001a2c: 00c12503 lw a0,12(sp) +80001a30: 40850533 sub a0,a0,s0 +80001a34: 02c12083 lw ra,44(sp) +80001a38: 02812403 lw s0,40(sp) +80001a3c: 05010113 addi sp,sp,80 +80001a40: 00008067 ret + +80001a44 <_init>: +{ +80001a44: f6010113 addi sp,sp,-160 +80001a48: 08112e23 sw ra,156(sp) +80001a4c: 08812c23 sw s0,152(sp) +80001a50: 08912a23 sw s1,148(sp) +80001a54: 09212823 sw s2,144(sp) +80001a58: 09312623 sw s3,140(sp) +80001a5c: 00050413 mv s0,a0 +80001a60: 00058913 mv s2,a1 +80001a64: 03f10493 addi s1,sp,63 +80001a68: fc04f493 andi s1,s1,-64 + init_tls(); +80001a6c: 9fdff0ef jal ra,80001468 + thread_entry(cid, nc); +80001a70: 00090593 mv a1,s2 +80001a74: 00040513 mv a0,s0 +80001a78: 939ff0ef jal ra,800013b0 + int ret = main(0, 0); +80001a7c: 00000593 li a1,0 +80001a80: 00000513 li a0,0 +80001a84: dc4ff0ef jal ra,80001048
+80001a88: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80001a8c: 00000413 li s0,0 + char* pbuf = buf; +80001a90: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80001a94: 0080006f j 80001a9c <_init+0x58> +80001a98: 00140413 addi s0,s0,1 +80001a9c: 00100793 li a5,1 +80001aa0: 0487c263 blt a5,s0,80001ae4 <_init+0xa0> + if (counters[i]) +80001aa4: 00241713 slli a4,s0,0x2 +80001aa8: 00002797 auipc a5,0x2 +80001aac: 6a078793 addi a5,a5,1696 # 80004148 +80001ab0: 00e787b3 add a5,a5,a4 +80001ab4: 0007a683 lw a3,0(a5) +80001ab8: fe0680e3 beqz a3,80001a98 <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +80001abc: 00002797 auipc a5,0x2 +80001ac0: 68478793 addi a5,a5,1668 # 80004140 +80001ac4: 00e787b3 add a5,a5,a4 +80001ac8: 0007a603 lw a2,0(a5) +80001acc: 00002597 auipc a1,0x2 +80001ad0: 1e058593 addi a1,a1,480 # 80003cac <__clz_tab+0x134> +80001ad4: 00090513 mv a0,s2 +80001ad8: f05ff0ef jal ra,800019dc +80001adc: 00a90933 add s2,s2,a0 +80001ae0: fb9ff06f j 80001a98 <_init+0x54> + if (pbuf != buf) +80001ae4: 01248663 beq s1,s2,80001af0 <_init+0xac> + printstr(buf); +80001ae8: 00048513 mv a0,s1 +80001aec: 9fdff0ef jal ra,800014e8 + exit(ret); +80001af0: 00098513 mv a0,s3 +80001af4: 8a1ff0ef jal ra,80001394 + +80001af8 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +80001af8: 00150613 addi a2,a0,1 +80001afc: 00054783 lbu a5,0(a0) + c2 = *s2++; +80001b00: 00158693 addi a3,a1,1 +80001b04: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +80001b08: 00078863 beqz a5,80001b18 + c1 = *s1++; +80001b0c: 00060513 mv a0,a2 + c2 = *s2++; +80001b10: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +80001b14: fee782e3 beq a5,a4,80001af8 + + return c1 - c2; +} +80001b18: 40e78533 sub a0,a5,a4 +80001b1c: 00008067 ret + +80001b20 : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +80001b20: 00050793 mv a5,a0 + while ((*d++ = *src++)) +80001b24: 0005c703 lbu a4,0(a1) +80001b28: 00e78023 sb a4,0(a5) +80001b2c: 00158593 addi a1,a1,1 +80001b30: 00178793 addi a5,a5,1 +80001b34: fe0718e3 bnez a4,80001b24 + ; + return dest; +} +80001b38: 00008067 ret + +80001b3c : + +long atol(const char* str) +{ +80001b3c: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +80001b40: 0080006f j 80001b48 + str++; +80001b44: 00178793 addi a5,a5,1 + while (*str == ' ') +80001b48: 0007c703 lbu a4,0(a5) +80001b4c: 02000693 li a3,32 +80001b50: fed70ae3 beq a4,a3,80001b44 + + if (*str == '-' || *str == '+') { +80001b54: 02d00693 li a3,45 +80001b58: 00d70a63 beq a4,a3,80001b6c +80001b5c: 02b00693 li a3,43 +80001b60: 00d70663 beq a4,a3,80001b6c + int sign = 0; +80001b64: 00000613 li a2,0 +80001b68: 0100006f j 80001b78 + sign = *str == '-'; +80001b6c: fd370713 addi a4,a4,-45 +80001b70: 00173613 seqz a2,a4 + str++; +80001b74: 00178793 addi a5,a5,1 + int sign = 0; +80001b78: 00000513 li a0,0 +80001b7c: 01c0006f j 80001b98 + } + + while (*str) { + res *= 10; +80001b80: 00251693 slli a3,a0,0x2 +80001b84: 00a686b3 add a3,a3,a0 +80001b88: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80001b8c: 00178793 addi a5,a5,1 +80001b90: fd070713 addi a4,a4,-48 +80001b94: 00e50533 add a0,a0,a4 + while (*str) { +80001b98: 0007c703 lbu a4,0(a5) +80001b9c: fe0712e3 bnez a4,80001b80 + } + + return sign ? -res : res; +80001ba0: 00060463 beqz a2,80001ba8 +80001ba4: 40a00533 neg a0,a0 +} +80001ba8: 00008067 ret + +80001bac <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80001bac: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80001bb0: 00002717 auipc a4,0x2 +80001bb4: 58c70713 addi a4,a4,1420 # 8000413c +80001bb8: 00072703 lw a4,0(a4) +80001bbc: 00070e63 beqz a4,80001bd8 <_sbrk+0x2c> + heap_end = & _end; + + prev_heap_end = heap_end; +80001bc0: 00002717 auipc a4,0x2 +80001bc4: 57c70713 addi a4,a4,1404 # 8000413c +80001bc8: 00072503 lw a0,0(a4) + heap_end += incr; +80001bcc: 00f507b3 add a5,a0,a5 +80001bd0: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80001bd4: 00008067 ret + heap_end = & _end; +80001bd8: 86018713 addi a4,gp,-1952 # 80004180 <_end> +80001bdc: 00002697 auipc a3,0x2 +80001be0: 56e6a023 sw a4,1376(a3) # 8000413c +80001be4: fddff06f j 80001bc0 <_sbrk+0x14> + +80001be8 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80001be8: 00058793 mv a5,a1 + d0 = dd.s.low; +80001bec: 00060813 mv a6,a2 + d1 = dd.s.high; +80001bf0: 00068893 mv a7,a3 + n0 = nn.s.low; +80001bf4: 00050313 mv t1,a0 + if (d1 == 0) +80001bf8: 28069663 bnez a3,80001e84 <__udivdi3+0x29c> +80001bfc: 80004737 lui a4,0x80004 +80001c00: b7870713 addi a4,a4,-1160 # 80003b78 + if (d0 > n1) +80001c04: 0ec5f663 bleu a2,a1,80001cf0 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80001c08: 000106b7 lui a3,0x10 +80001c0c: 0cd67863 bleu a3,a2,80001cdc <__udivdi3+0xf4> +80001c10: 0ff00693 li a3,255 +80001c14: 00c6b6b3 sltu a3,a3,a2 +80001c18: 00369693 slli a3,a3,0x3 +80001c1c: 00d658b3 srl a7,a2,a3 +80001c20: 01170733 add a4,a4,a7 +80001c24: 00074703 lbu a4,0(a4) +80001c28: 00d706b3 add a3,a4,a3 +80001c2c: 02000713 li a4,32 +80001c30: 40d70733 sub a4,a4,a3 + if (bm != 0) +80001c34: 00070c63 beqz a4,80001c4c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001c38: 00e797b3 sll a5,a5,a4 +80001c3c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80001c40: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80001c44: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80001c48: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001c4c: 01085513 srli a0,a6,0x10 +80001c50: 02a5d7b3 divu a5,a1,a0 +80001c54: 01081613 slli a2,a6,0x10 +80001c58: 01065613 srli a2,a2,0x10 +80001c5c: 01035693 srli a3,t1,0x10 +80001c60: 02a5f733 remu a4,a1,a0 +80001c64: 02f605b3 mul a1,a2,a5 +80001c68: 01071713 slli a4,a4,0x10 +80001c6c: 00d766b3 or a3,a4,a3 +80001c70: 00078713 mv a4,a5 +80001c74: 00b6fe63 bleu a1,a3,80001c90 <__udivdi3+0xa8> +80001c78: 010686b3 add a3,a3,a6 +80001c7c: fff78713 addi a4,a5,-1 +80001c80: 0106e863 bltu a3,a6,80001c90 <__udivdi3+0xa8> +80001c84: 00b6f663 bleu a1,a3,80001c90 <__udivdi3+0xa8> +80001c88: ffe78713 addi a4,a5,-2 +80001c8c: 010686b3 add a3,a3,a6 +80001c90: 40b686b3 sub a3,a3,a1 +80001c94: 02a6f7b3 remu a5,a3,a0 +80001c98: 01031313 slli t1,t1,0x10 +80001c9c: 01035313 srli t1,t1,0x10 +80001ca0: 02a6d6b3 divu a3,a3,a0 +80001ca4: 01079793 slli a5,a5,0x10 +80001ca8: 0067e333 or t1,a5,t1 +80001cac: 02d605b3 mul a1,a2,a3 +80001cb0: 00068513 mv a0,a3 +80001cb4: 00b37c63 bleu a1,t1,80001ccc <__udivdi3+0xe4> +80001cb8: 00680333 add t1,a6,t1 +80001cbc: fff68513 addi a0,a3,-1 # ffff +80001cc0: 01036663 bltu t1,a6,80001ccc <__udivdi3+0xe4> +80001cc4: 00b37463 bleu a1,t1,80001ccc <__udivdi3+0xe4> +80001cc8: ffe68513 addi a0,a3,-2 +80001ccc: 01071713 slli a4,a4,0x10 +80001cd0: 00a76733 or a4,a4,a0 + q1 = 0; +80001cd4: 00000593 li a1,0 +80001cd8: 0e40006f j 80001dbc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80001cdc: 010008b7 lui a7,0x1000 +80001ce0: 01000693 li a3,16 +80001ce4: f3166ce3 bltu a2,a7,80001c1c <__udivdi3+0x34> +80001ce8: 01800693 li a3,24 +80001cec: f31ff06f j 80001c1c <__udivdi3+0x34> + if (d0 == 0) +80001cf0: 00061663 bnez a2,80001cfc <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80001cf4: 00100693 li a3,1 +80001cf8: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +80001cfc: 000106b7 lui a3,0x10 +80001d00: 0cd87263 bleu a3,a6,80001dc4 <__udivdi3+0x1dc> +80001d04: 0ff00693 li a3,255 +80001d08: 0106f463 bleu a6,a3,80001d10 <__udivdi3+0x128> +80001d0c: 00800893 li a7,8 +80001d10: 011856b3 srl a3,a6,a7 +80001d14: 00d70733 add a4,a4,a3 +80001d18: 00074683 lbu a3,0(a4) +80001d1c: 02000713 li a4,32 +80001d20: 011686b3 add a3,a3,a7 +80001d24: 40d70733 sub a4,a4,a3 + if (bm == 0) +80001d28: 0a071863 bnez a4,80001dd8 <__udivdi3+0x1f0> + n1 -= d0; +80001d2c: 410787b3 sub a5,a5,a6 + q1 = 1; +80001d30: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80001d34: 01085613 srli a2,a6,0x10 +80001d38: 01081893 slli a7,a6,0x10 +80001d3c: 0108d893 srli a7,a7,0x10 +80001d40: 01035693 srli a3,t1,0x10 +80001d44: 02c7f733 remu a4,a5,a2 +80001d48: 02c7d7b3 divu a5,a5,a2 +80001d4c: 01071713 slli a4,a4,0x10 +80001d50: 00d766b3 or a3,a4,a3 +80001d54: 02f88533 mul a0,a7,a5 +80001d58: 00078713 mv a4,a5 +80001d5c: 00a6fe63 bleu a0,a3,80001d78 <__udivdi3+0x190> +80001d60: 010686b3 add a3,a3,a6 +80001d64: fff78713 addi a4,a5,-1 +80001d68: 0106e863 bltu a3,a6,80001d78 <__udivdi3+0x190> +80001d6c: 00a6f663 bleu a0,a3,80001d78 <__udivdi3+0x190> +80001d70: ffe78713 addi a4,a5,-2 +80001d74: 010686b3 add a3,a3,a6 +80001d78: 40a686b3 sub a3,a3,a0 +80001d7c: 02c6f7b3 remu a5,a3,a2 +80001d80: 01031313 slli t1,t1,0x10 +80001d84: 01035313 srli t1,t1,0x10 +80001d88: 02c6d6b3 divu a3,a3,a2 +80001d8c: 01079793 slli a5,a5,0x10 +80001d90: 0067e333 or t1,a5,t1 +80001d94: 02d888b3 mul a7,a7,a3 +80001d98: 00068513 mv a0,a3 +80001d9c: 01137c63 bleu a7,t1,80001db4 <__udivdi3+0x1cc> +80001da0: 00680333 add t1,a6,t1 +80001da4: fff68513 addi a0,a3,-1 # ffff +80001da8: 01036663 bltu t1,a6,80001db4 <__udivdi3+0x1cc> +80001dac: 01137463 bleu a7,t1,80001db4 <__udivdi3+0x1cc> +80001db0: ffe68513 addi a0,a3,-2 +80001db4: 01071713 slli a4,a4,0x10 +80001db8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +80001dbc: 00070513 mv a0,a4 +80001dc0: 00008067 ret + count_leading_zeros (bm, d0); +80001dc4: 010006b7 lui a3,0x1000 +80001dc8: 01000893 li a7,16 +80001dcc: f4d862e3 bltu a6,a3,80001d10 <__udivdi3+0x128> +80001dd0: 01800893 li a7,24 +80001dd4: f3dff06f j 80001d10 <__udivdi3+0x128> + d0 = d0 << bm; +80001dd8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +80001ddc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80001de0: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80001de4: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001de8: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80001dec: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001df0: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80001df4: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80001df8: 01081793 slli a5,a6,0x10 +80001dfc: 0107d793 srli a5,a5,0x10 +80001e00: 0108d613 srli a2,a7,0x10 +80001e04: 02a5d5b3 divu a1,a1,a0 +80001e08: 01071713 slli a4,a4,0x10 +80001e0c: 00c76733 or a4,a4,a2 +80001e10: 02b786b3 mul a3,a5,a1 +80001e14: 00058613 mv a2,a1 +80001e18: 00d77e63 bleu a3,a4,80001e34 <__udivdi3+0x24c> +80001e1c: 01070733 add a4,a4,a6 +80001e20: fff58613 addi a2,a1,-1 +80001e24: 01076863 bltu a4,a6,80001e34 <__udivdi3+0x24c> +80001e28: 00d77663 bleu a3,a4,80001e34 <__udivdi3+0x24c> +80001e2c: ffe58613 addi a2,a1,-2 +80001e30: 01070733 add a4,a4,a6 +80001e34: 40d706b3 sub a3,a4,a3 +80001e38: 02a6f733 remu a4,a3,a0 +80001e3c: 01089893 slli a7,a7,0x10 +80001e40: 0108d893 srli a7,a7,0x10 +80001e44: 02a6d6b3 divu a3,a3,a0 +80001e48: 01071713 slli a4,a4,0x10 +80001e4c: 02d785b3 mul a1,a5,a3 +80001e50: 011767b3 or a5,a4,a7 +80001e54: 00068713 mv a4,a3 +80001e58: 00b7fe63 bleu a1,a5,80001e74 <__udivdi3+0x28c> +80001e5c: 010787b3 add a5,a5,a6 +80001e60: fff68713 addi a4,a3,-1 # ffffff +80001e64: 0107e863 bltu a5,a6,80001e74 <__udivdi3+0x28c> +80001e68: 00b7f663 bleu a1,a5,80001e74 <__udivdi3+0x28c> +80001e6c: ffe68713 addi a4,a3,-2 +80001e70: 010787b3 add a5,a5,a6 +80001e74: 40b787b3 sub a5,a5,a1 +80001e78: 01061593 slli a1,a2,0x10 +80001e7c: 00e5e5b3 or a1,a1,a4 +80001e80: eb5ff06f j 80001d34 <__udivdi3+0x14c> + if (d1 > n1) +80001e84: 18d5e663 bltu a1,a3,80002010 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +80001e88: 00010737 lui a4,0x10 +80001e8c: 04e6f463 bleu a4,a3,80001ed4 <__udivdi3+0x2ec> +80001e90: 0ff00813 li a6,255 +80001e94: 00d83733 sltu a4,a6,a3 +80001e98: 00371713 slli a4,a4,0x3 +80001e9c: 80004837 lui a6,0x80004 +80001ea0: b7880813 addi a6,a6,-1160 # 80003b78 +80001ea4: 00e6d5b3 srl a1,a3,a4 +80001ea8: 010585b3 add a1,a1,a6 +80001eac: 0005c803 lbu a6,0(a1) +80001eb0: 02000593 li a1,32 +80001eb4: 00e80833 add a6,a6,a4 +80001eb8: 410585b3 sub a1,a1,a6 + if (bm == 0) +80001ebc: 02059663 bnez a1,80001ee8 <__udivdi3+0x300> + q0 = 1; +80001ec0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +80001ec4: eef6ece3 bltu a3,a5,80001dbc <__udivdi3+0x1d4> +80001ec8: 00c53533 sltu a0,a0,a2 +80001ecc: 00154713 xori a4,a0,1 +80001ed0: eedff06f j 80001dbc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +80001ed4: 010005b7 lui a1,0x1000 +80001ed8: 01000713 li a4,16 +80001edc: fcb6e0e3 bltu a3,a1,80001e9c <__udivdi3+0x2b4> +80001ee0: 01800713 li a4,24 +80001ee4: fb9ff06f j 80001e9c <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80001ee8: 01065733 srl a4,a2,a6 +80001eec: 00b696b3 sll a3,a3,a1 +80001ef0: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001ef4: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80001ef8: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001efc: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80001f00: 00b797b3 sll a5,a5,a1 +80001f04: 01055833 srl a6,a0,a6 +80001f08: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001f0c: 01069793 slli a5,a3,0x10 +80001f10: 0107d793 srli a5,a5,0x10 +80001f14: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80001f18: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001f1c: 03d75733 divu a4,a4,t4 +80001f20: 01089893 slli a7,a7,0x10 +80001f24: 0108e833 or a6,a7,a6 +80001f28: 02e78f33 mul t5,a5,a4 +80001f2c: 00070e13 mv t3,a4 +80001f30: 01e87e63 bleu t5,a6,80001f4c <__udivdi3+0x364> +80001f34: 00d80833 add a6,a6,a3 +80001f38: fff70e13 addi t3,a4,-1 # ffff +80001f3c: 00d86863 bltu a6,a3,80001f4c <__udivdi3+0x364> +80001f40: 01e87663 bleu t5,a6,80001f4c <__udivdi3+0x364> +80001f44: ffe70e13 addi t3,a4,-2 +80001f48: 00d80833 add a6,a6,a3 +80001f4c: 41e80833 sub a6,a6,t5 +80001f50: 03d878b3 remu a7,a6,t4 +80001f54: 03d85833 divu a6,a6,t4 +80001f58: 01089893 slli a7,a7,0x10 +80001f5c: 03078eb3 mul t4,a5,a6 +80001f60: 01031793 slli a5,t1,0x10 +80001f64: 0107d793 srli a5,a5,0x10 +80001f68: 00f8e7b3 or a5,a7,a5 +80001f6c: 00080713 mv a4,a6 +80001f70: 01d7fe63 bleu t4,a5,80001f8c <__udivdi3+0x3a4> +80001f74: 00d787b3 add a5,a5,a3 +80001f78: fff80713 addi a4,a6,-1 +80001f7c: 00d7e863 bltu a5,a3,80001f8c <__udivdi3+0x3a4> +80001f80: 01d7f663 bleu t4,a5,80001f8c <__udivdi3+0x3a4> +80001f84: ffe80713 addi a4,a6,-2 +80001f88: 00d787b3 add a5,a5,a3 +80001f8c: 010e1e13 slli t3,t3,0x10 +80001f90: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +80001f94: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80001f98: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +80001f9c: fffe8813 addi a6,t4,-1 # ffff +80001fa0: 01077333 and t1,a4,a6 +80001fa4: 01075893 srli a7,a4,0x10 +80001fa8: 01067833 and a6,a2,a6 +80001fac: 01065613 srli a2,a2,0x10 +80001fb0: 03030e33 mul t3,t1,a6 +80001fb4: 03088833 mul a6,a7,a6 +80001fb8: 010e5693 srli a3,t3,0x10 +80001fbc: 02c30333 mul t1,t1,a2 +80001fc0: 01030333 add t1,t1,a6 +80001fc4: 006686b3 add a3,a3,t1 +80001fc8: 02c888b3 mul a7,a7,a2 +80001fcc: 0106f463 bleu a6,a3,80001fd4 <__udivdi3+0x3ec> +80001fd0: 01d888b3 add a7,a7,t4 +80001fd4: 0106d613 srli a2,a3,0x10 +80001fd8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80001fdc: 0317e663 bltu a5,a7,80002008 <__udivdi3+0x420> +80001fe0: cf179ae3 bne a5,a7,80001cd4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80001fe4: 000107b7 lui a5,0x10 +80001fe8: fff78793 addi a5,a5,-1 # ffff +80001fec: 00f6f6b3 and a3,a3,a5 +80001ff0: 01069693 slli a3,a3,0x10 +80001ff4: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80001ff8: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +80001ffc: 01c686b3 add a3,a3,t3 + q1 = 0; +80002000: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80002004: dad57ce3 bleu a3,a0,80001dbc <__udivdi3+0x1d4> + q0--; +80002008: fff70713 addi a4,a4,-1 +8000200c: cc9ff06f j 80001cd4 <__udivdi3+0xec> + q1 = 0; +80002010: 00000593 li a1,0 + q0 = 0; +80002014: 00000713 li a4,0 +80002018: da5ff06f j 80001dbc <__udivdi3+0x1d4> + +8000201c <__umoddi3>: + d0 = dd.s.low; +8000201c: 00060893 mv a7,a2 + d1 = dd.s.high; +80002020: 00068713 mv a4,a3 + n0 = nn.s.low; +80002024: 00050793 mv a5,a0 + n1 = nn.s.high; +80002028: 00058813 mv a6,a1 + if (d1 == 0) +8000202c: 22069c63 bnez a3,80002264 <__umoddi3+0x248> +80002030: 800046b7 lui a3,0x80004 +80002034: b7868693 addi a3,a3,-1160 # 80003b78 + if (d0 > n1) +80002038: 0cc5fc63 bleu a2,a1,80002110 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000203c: 00010337 lui t1,0x10 +80002040: 0a667e63 bleu t1,a2,800020fc <__umoddi3+0xe0> +80002044: 0ff00313 li t1,255 +80002048: 00c37463 bleu a2,t1,80002050 <__umoddi3+0x34> +8000204c: 00800713 li a4,8 +80002050: 00e65333 srl t1,a2,a4 +80002054: 006686b3 add a3,a3,t1 +80002058: 0006ce03 lbu t3,0(a3) +8000205c: 02000313 li t1,32 +80002060: 00ee0e33 add t3,t3,a4 +80002064: 41c30333 sub t1,t1,t3 + if (bm != 0) +80002068: 00030c63 beqz t1,80002080 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000206c: 006595b3 sll a1,a1,t1 +80002070: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80002074: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80002078: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000207c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80002080: 0108d613 srli a2,a7,0x10 +80002084: 02c87733 remu a4,a6,a2 +80002088: 01089513 slli a0,a7,0x10 +8000208c: 01055513 srli a0,a0,0x10 +80002090: 0107d693 srli a3,a5,0x10 +80002094: 02c85833 divu a6,a6,a2 +80002098: 01071713 slli a4,a4,0x10 +8000209c: 00d766b3 or a3,a4,a3 +800020a0: 03050833 mul a6,a0,a6 +800020a4: 0106fa63 bleu a6,a3,800020b8 <__umoddi3+0x9c> +800020a8: 011686b3 add a3,a3,a7 +800020ac: 0116e663 bltu a3,a7,800020b8 <__umoddi3+0x9c> +800020b0: 0106f463 bleu a6,a3,800020b8 <__umoddi3+0x9c> +800020b4: 011686b3 add a3,a3,a7 +800020b8: 410686b3 sub a3,a3,a6 +800020bc: 02c6f733 remu a4,a3,a2 +800020c0: 01079793 slli a5,a5,0x10 +800020c4: 0107d793 srli a5,a5,0x10 +800020c8: 02c6d6b3 divu a3,a3,a2 +800020cc: 02d506b3 mul a3,a0,a3 +800020d0: 01071513 slli a0,a4,0x10 +800020d4: 00f567b3 or a5,a0,a5 +800020d8: 00d7fa63 bleu a3,a5,800020ec <__umoddi3+0xd0> +800020dc: 011787b3 add a5,a5,a7 +800020e0: 0117e663 bltu a5,a7,800020ec <__umoddi3+0xd0> +800020e4: 00d7f463 bleu a3,a5,800020ec <__umoddi3+0xd0> +800020e8: 011787b3 add a5,a5,a7 +800020ec: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +800020f0: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +800020f4: 00000593 li a1,0 +} +800020f8: 00008067 ret + count_leading_zeros (bm, d0); +800020fc: 01000337 lui t1,0x1000 +80002100: 01000713 li a4,16 +80002104: f46666e3 bltu a2,t1,80002050 <__umoddi3+0x34> +80002108: 01800713 li a4,24 +8000210c: f45ff06f j 80002050 <__umoddi3+0x34> + if (d0 == 0) +80002110: 00061663 bnez a2,8000211c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80002114: 00100613 li a2,1 +80002118: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000211c: 00010637 lui a2,0x10 +80002120: 0ac8f263 bleu a2,a7,800021c4 <__umoddi3+0x1a8> +80002124: 0ff00613 li a2,255 +80002128: 01167463 bleu a7,a2,80002130 <__umoddi3+0x114> +8000212c: 00800713 li a4,8 +80002130: 00e8d633 srl a2,a7,a4 +80002134: 00c686b3 add a3,a3,a2 +80002138: 0006ce03 lbu t3,0(a3) +8000213c: 02000313 li t1,32 +80002140: 00ee0e33 add t3,t3,a4 +80002144: 41c30333 sub t1,t1,t3 + if (bm == 0) +80002148: 08031863 bnez t1,800021d8 <__umoddi3+0x1bc> + n1 -= d0; +8000214c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80002150: 0108d713 srli a4,a7,0x10 +80002154: 01089513 slli a0,a7,0x10 +80002158: 01055513 srli a0,a0,0x10 +8000215c: 0107d613 srli a2,a5,0x10 +80002160: 02e5f6b3 remu a3,a1,a4 +80002164: 02e5d5b3 divu a1,a1,a4 +80002168: 01069693 slli a3,a3,0x10 +8000216c: 00c6e6b3 or a3,a3,a2 +80002170: 02b505b3 mul a1,a0,a1 +80002174: 00b6fa63 bleu a1,a3,80002188 <__umoddi3+0x16c> +80002178: 011686b3 add a3,a3,a7 +8000217c: 0116e663 bltu a3,a7,80002188 <__umoddi3+0x16c> +80002180: 00b6f463 bleu a1,a3,80002188 <__umoddi3+0x16c> +80002184: 011686b3 add a3,a3,a7 +80002188: 40b685b3 sub a1,a3,a1 +8000218c: 02e5f6b3 remu a3,a1,a4 +80002190: 01079793 slli a5,a5,0x10 +80002194: 0107d793 srli a5,a5,0x10 +80002198: 02e5d5b3 divu a1,a1,a4 +8000219c: 02b505b3 mul a1,a0,a1 +800021a0: 01069513 slli a0,a3,0x10 +800021a4: 00f567b3 or a5,a0,a5 +800021a8: 00b7fa63 bleu a1,a5,800021bc <__umoddi3+0x1a0> +800021ac: 011787b3 add a5,a5,a7 +800021b0: 0117e663 bltu a5,a7,800021bc <__umoddi3+0x1a0> +800021b4: 00b7f463 bleu a1,a5,800021bc <__umoddi3+0x1a0> +800021b8: 011787b3 add a5,a5,a7 +800021bc: 40b787b3 sub a5,a5,a1 +800021c0: f31ff06f j 800020f0 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800021c4: 01000637 lui a2,0x1000 +800021c8: 01000713 li a4,16 +800021cc: f6c8e2e3 bltu a7,a2,80002130 <__umoddi3+0x114> +800021d0: 01800713 li a4,24 +800021d4: f5dff06f j 80002130 <__umoddi3+0x114> + d0 = d0 << bm; +800021d8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800021dc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +800021e0: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +800021e4: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +800021e8: 0108d513 srli a0,a7,0x10 +800021ec: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +800021f0: 006595b3 sll a1,a1,t1 +800021f4: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +800021f8: 01089593 slli a1,a7,0x10 +800021fc: 0105d593 srli a1,a1,0x10 +80002200: 010e5613 srli a2,t3,0x10 +80002204: 02a75733 divu a4,a4,a0 +80002208: 01069693 slli a3,a3,0x10 +8000220c: 00c6e6b3 or a3,a3,a2 +80002210: 02e58733 mul a4,a1,a4 +80002214: 00e6fa63 bleu a4,a3,80002228 <__umoddi3+0x20c> +80002218: 011686b3 add a3,a3,a7 +8000221c: 0116e663 bltu a3,a7,80002228 <__umoddi3+0x20c> +80002220: 00e6f463 bleu a4,a3,80002228 <__umoddi3+0x20c> +80002224: 011686b3 add a3,a3,a7 +80002228: 40e68633 sub a2,a3,a4 +8000222c: 02a676b3 remu a3,a2,a0 +80002230: 010e1e13 slli t3,t3,0x10 +80002234: 010e5e13 srli t3,t3,0x10 +80002238: 02a65633 divu a2,a2,a0 +8000223c: 01069693 slli a3,a3,0x10 +80002240: 02c58633 mul a2,a1,a2 +80002244: 01c6e5b3 or a1,a3,t3 +80002248: 00c5fa63 bleu a2,a1,8000225c <__umoddi3+0x240> +8000224c: 011585b3 add a1,a1,a7 +80002250: 0115e663 bltu a1,a7,8000225c <__umoddi3+0x240> +80002254: 00c5f463 bleu a2,a1,8000225c <__umoddi3+0x240> +80002258: 011585b3 add a1,a1,a7 +8000225c: 40c585b3 sub a1,a1,a2 +80002260: ef1ff06f j 80002150 <__umoddi3+0x134> + if (d1 > n1) +80002264: e8d5eae3 bltu a1,a3,800020f8 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80002268: 00010737 lui a4,0x10 +8000226c: 04e6fc63 bleu a4,a3,800022c4 <__umoddi3+0x2a8> +80002270: 0ff00e93 li t4,255 +80002274: 00deb733 sltu a4,t4,a3 +80002278: 00371713 slli a4,a4,0x3 +8000227c: 80004337 lui t1,0x80004 +80002280: 00e6d8b3 srl a7,a3,a4 +80002284: b7830313 addi t1,t1,-1160 # 80003b78 +80002288: 006888b3 add a7,a7,t1 +8000228c: 0008ce83 lbu t4,0(a7) # 1000000 +80002290: 02000e13 li t3,32 +80002294: 00ee8eb3 add t4,t4,a4 +80002298: 41de0e33 sub t3,t3,t4 + if (bm == 0) +8000229c: 020e1e63 bnez t3,800022d8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800022a0: 00b6e463 bltu a3,a1,800022a8 <__umoddi3+0x28c> +800022a4: 00c56a63 bltu a0,a2,800022b8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800022a8: 40c507b3 sub a5,a0,a2 +800022ac: 40d585b3 sub a1,a1,a3 +800022b0: 00f53533 sltu a0,a0,a5 +800022b4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800022b8: 00078513 mv a0,a5 +800022bc: 00080593 mv a1,a6 +800022c0: e39ff06f j 800020f8 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800022c4: 010008b7 lui a7,0x1000 +800022c8: 01000713 li a4,16 +800022cc: fb16e8e3 bltu a3,a7,8000227c <__umoddi3+0x260> +800022d0: 01800713 li a4,24 +800022d4: fa9ff06f j 8000227c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800022d8: 01d65733 srl a4,a2,t4 +800022dc: 01c696b3 sll a3,a3,t3 +800022e0: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +800022e4: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +800022e8: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +800022ec: 01c595b3 sll a1,a1,t3 +800022f0: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +800022f4: 0106d593 srli a1,a3,0x10 +800022f8: 02b77333 remu t1,a4,a1 +800022fc: 01069f13 slli t5,a3,0x10 +80002300: 010f5f13 srli t5,t5,0x10 +80002304: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80002308: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000230c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002310: 02b75733 divu a4,a4,a1 +80002314: 01031313 slli t1,t1,0x10 +80002318: 011368b3 or a7,t1,a7 +8000231c: 02ef0833 mul a6,t5,a4 +80002320: 00070313 mv t1,a4 +80002324: 0108fe63 bleu a6,a7,80002340 <__umoddi3+0x324> +80002328: 00d888b3 add a7,a7,a3 +8000232c: fff70313 addi t1,a4,-1 # ffff +80002330: 00d8e863 bltu a7,a3,80002340 <__umoddi3+0x324> +80002334: 0108f663 bleu a6,a7,80002340 <__umoddi3+0x324> +80002338: ffe70313 addi t1,a4,-2 +8000233c: 00d888b3 add a7,a7,a3 +80002340: 410888b3 sub a7,a7,a6 +80002344: 02b8ffb3 remu t6,a7,a1 +80002348: 02b8d8b3 divu a7,a7,a1 +8000234c: 010f9f93 slli t6,t6,0x10 +80002350: 031f05b3 mul a1,t5,a7 +80002354: 01079f13 slli t5,a5,0x10 +80002358: 010f5f13 srli t5,t5,0x10 +8000235c: 01efef33 or t5,t6,t5 +80002360: 00088713 mv a4,a7 +80002364: 00bf7e63 bleu a1,t5,80002380 <__umoddi3+0x364> +80002368: 00df0f33 add t5,t5,a3 +8000236c: fff88713 addi a4,a7,-1 # ffffff +80002370: 00df6863 bltu t5,a3,80002380 <__umoddi3+0x364> +80002374: 00bf7663 bleu a1,t5,80002380 <__umoddi3+0x364> +80002378: ffe88713 addi a4,a7,-2 +8000237c: 00df0f33 add t5,t5,a3 +80002380: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +80002384: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002388: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +8000238c: fff88793 addi a5,a7,-1 # ffff +80002390: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80002394: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +80002398: 00f375b3 and a1,t1,a5 +8000239c: 01035313 srli t1,t1,0x10 +800023a0: 00f677b3 and a5,a2,a5 +800023a4: 02f58733 mul a4,a1,a5 +800023a8: 02f307b3 mul a5,t1,a5 +800023ac: 030585b3 mul a1,a1,a6 +800023b0: 03030333 mul t1,t1,a6 +800023b4: 00f585b3 add a1,a1,a5 +800023b8: 01075813 srli a6,a4,0x10 +800023bc: 00b80833 add a6,a6,a1 +800023c0: 00f87463 bleu a5,a6,800023c8 <__umoddi3+0x3ac> +800023c4: 01130333 add t1,t1,a7 +800023c8: 000107b7 lui a5,0x10 +800023cc: fff78793 addi a5,a5,-1 # ffff +800023d0: 01085593 srli a1,a6,0x10 +800023d4: 00f87833 and a6,a6,a5 +800023d8: 01081813 slli a6,a6,0x10 +800023dc: 00f77733 and a4,a4,a5 +800023e0: 006585b3 add a1,a1,t1 +800023e4: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800023e8: 00bf6663 bltu t5,a1,800023f4 <__umoddi3+0x3d8> +800023ec: 00bf1e63 bne t5,a1,80002408 <__umoddi3+0x3ec> +800023f0: 00e57c63 bleu a4,a0,80002408 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +800023f4: 40c70633 sub a2,a4,a2 +800023f8: 00c73733 sltu a4,a4,a2 +800023fc: 40d585b3 sub a1,a1,a3 +80002400: 40e585b3 sub a1,a1,a4 +80002404: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80002408: 40e50733 sub a4,a0,a4 +8000240c: 00e53533 sltu a0,a0,a4 +80002410: 40bf05b3 sub a1,t5,a1 +80002414: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80002418: 01d597b3 sll a5,a1,t4 +8000241c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80002420: 00e7e533 or a0,a5,a4 +80002424: 01c5d5b3 srl a1,a1,t3 + return w; +80002428: cd1ff06f j 800020f8 <__umoddi3+0xdc> + +8000242c <__adddf3>: + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); +8000242c: 00100837 lui a6,0x100 +80002430: fff80813 addi a6,a6,-1 # fffff +{ +80002434: fe010113 addi sp,sp,-32 + FP_UNPACK_SEMIRAW_D (A, a); +80002438: 00b878b3 and a7,a6,a1 +8000243c: 0145d713 srli a4,a1,0x14 +80002440: 01d55793 srli a5,a0,0x1d +{ +80002444: 01212823 sw s2,16(sp) + FP_UNPACK_SEMIRAW_D (A, a); +80002448: 7ff77913 andi s2,a4,2047 +8000244c: 00389713 slli a4,a7,0x3 + FP_UNPACK_SEMIRAW_D (B, b); +80002450: 00d87833 and a6,a6,a3 + FP_UNPACK_SEMIRAW_D (A, a); +80002454: 00e7e7b3 or a5,a5,a4 + FP_UNPACK_SEMIRAW_D (B, b); +80002458: 0146d713 srli a4,a3,0x14 +8000245c: 00381813 slli a6,a6,0x3 +{ +80002460: 00912a23 sw s1,20(sp) + FP_UNPACK_SEMIRAW_D (B, b); +80002464: 7ff77713 andi a4,a4,2047 +80002468: 01f6d893 srli a7,a3,0x1f +{ +8000246c: 00112e23 sw ra,28(sp) + FP_UNPACK_SEMIRAW_D (B, b); +80002470: 01d65693 srli a3,a2,0x1d +{ +80002474: 00812c23 sw s0,24(sp) +80002478: 01312623 sw s3,12(sp) + FP_UNPACK_SEMIRAW_D (A, a); +8000247c: 01f5d493 srli s1,a1,0x1f + FP_UNPACK_SEMIRAW_D (B, b); +80002480: 0106e333 or t1,a3,a6 + FP_UNPACK_SEMIRAW_D (A, a); +80002484: 00351513 slli a0,a0,0x3 + FP_UNPACK_SEMIRAW_D (B, b); +80002488: 00361613 slli a2,a2,0x3 +8000248c: 40e90833 sub a6,s2,a4 + FP_ADD_D (R, A, B); +80002490: 3b149463 bne s1,a7,80002838 <__adddf3+0x40c> +80002494: 1f005463 blez a6,8000267c <__adddf3+0x250> +80002498: 14071263 bnez a4,800025dc <__adddf3+0x1b0> +8000249c: 00c36733 or a4,t1,a2 +800024a0: 0c071463 bnez a4,80002568 <__adddf3+0x13c> +800024a4: 7ff00693 li a3,2047 +800024a8: 00080713 mv a4,a6 +800024ac: 30d81c63 bne a6,a3,800027c4 <__adddf3+0x398> +800024b0: 00a7e6b3 or a3,a5,a0 +800024b4: 30069863 bnez a3,800027c4 <__adddf3+0x398> +800024b8: 00000793 li a5,0 +800024bc: 00000513 li a0,0 + FP_PACK_SEMIRAW_D (r, R); +800024c0: 00879693 slli a3,a5,0x8 +800024c4: 0006de63 bgez a3,800024e0 <__adddf3+0xb4> +800024c8: 00170713 addi a4,a4,1 +800024cc: 7ff00693 li a3,2047 +800024d0: 74d70c63 beq a4,a3,80002c28 <__adddf3+0x7fc> +800024d4: ff8006b7 lui a3,0xff800 +800024d8: fff68693 addi a3,a3,-1 # ff7fffff +800024dc: 00d7f7b3 and a5,a5,a3 +800024e0: 01d79693 slli a3,a5,0x1d +800024e4: 00355513 srli a0,a0,0x3 +800024e8: 00a6e533 or a0,a3,a0 +800024ec: 7ff00693 li a3,2047 +800024f0: 0037d793 srli a5,a5,0x3 +800024f4: 00d71e63 bne a4,a3,80002510 <__adddf3+0xe4> +800024f8: 00f56533 or a0,a0,a5 +800024fc: 00000793 li a5,0 +80002500: 00050863 beqz a0,80002510 <__adddf3+0xe4> +80002504: 000807b7 lui a5,0x80 +80002508: 00000513 li a0,0 +8000250c: 00000493 li s1,0 +80002510: 001006b7 lui a3,0x100 +80002514: fff68693 addi a3,a3,-1 # fffff +80002518: 00d7f7b3 and a5,a5,a3 +8000251c: 801006b7 lui a3,0x80100 +80002520: 7ff77713 andi a4,a4,2047 +80002524: fff68693 addi a3,a3,-1 # 800fffff +80002528: 01471713 slli a4,a4,0x14 +8000252c: 00d7f7b3 and a5,a5,a3 +80002530: 00e7e7b3 or a5,a5,a4 +80002534: 80000737 lui a4,0x80000 +80002538: fff74713 not a4,a4 + FP_HANDLE_EXCEPTIONS; + + return r; +} +8000253c: 01c12083 lw ra,28(sp) +80002540: 01812403 lw s0,24(sp) + FP_PACK_SEMIRAW_D (r, R); +80002544: 01f49593 slli a1,s1,0x1f +80002548: 00e7f7b3 and a5,a5,a4 +8000254c: 00b7e733 or a4,a5,a1 +} +80002550: 01412483 lw s1,20(sp) +80002554: 01012903 lw s2,16(sp) +80002558: 00c12983 lw s3,12(sp) +8000255c: 00070593 mv a1,a4 +80002560: 02010113 addi sp,sp,32 +80002564: 00008067 ret + FP_ADD_D (R, A, B); +80002568: fff80593 addi a1,a6,-1 +8000256c: 04059c63 bnez a1,800025c4 <__adddf3+0x198> +80002570: 00c50633 add a2,a0,a2 +80002574: 00a63533 sltu a0,a2,a0 +80002578: 006787b3 add a5,a5,t1 +8000257c: 00a787b3 add a5,a5,a0 +80002580: 00100713 li a4,1 +80002584: 00060513 mv a0,a2 +80002588: 00879693 slli a3,a5,0x8 +8000258c: 2206dc63 bgez a3,800027c4 <__adddf3+0x398> +80002590: 00170713 addi a4,a4,1 # 80000001 +80002594: 7ff00693 li a3,2047 +80002598: f2d700e3 beq a4,a3,800024b8 <__adddf3+0x8c> +8000259c: ff8006b7 lui a3,0xff800 +800025a0: fff68693 addi a3,a3,-1 # ff7fffff +800025a4: 00d7f6b3 and a3,a5,a3 +800025a8: 00155593 srli a1,a0,0x1 +800025ac: 00157513 andi a0,a0,1 +800025b0: 01f69793 slli a5,a3,0x1f +800025b4: 00a5e533 or a0,a1,a0 +800025b8: 00a7e533 or a0,a5,a0 +800025bc: 0016d793 srli a5,a3,0x1 +800025c0: 2040006f j 800027c4 <__adddf3+0x398> +800025c4: 7ff00713 li a4,2047 +800025c8: 02e81463 bne a6,a4,800025f0 <__adddf3+0x1c4> +800025cc: 00a7e733 or a4,a5,a0 +800025d0: 62070063 beqz a4,80002bf0 <__adddf3+0x7c4> +800025d4: 7ff00713 li a4,2047 +800025d8: 1ec0006f j 800027c4 <__adddf3+0x398> +800025dc: 7ff00713 li a4,2047 +800025e0: fee906e3 beq s2,a4,800025cc <__adddf3+0x1a0> +800025e4: 00800737 lui a4,0x800 +800025e8: 00e36333 or t1,t1,a4 +800025ec: 00080593 mv a1,a6 +800025f0: 03800713 li a4,56 +800025f4: 06b74e63 blt a4,a1,80002670 <__adddf3+0x244> +800025f8: 01f00713 li a4,31 +800025fc: 04b74263 blt a4,a1,80002640 <__adddf3+0x214> +80002600: 02000713 li a4,32 +80002604: 40b70733 sub a4,a4,a1 +80002608: 00b656b3 srl a3,a2,a1 +8000260c: 00e31833 sll a6,t1,a4 +80002610: 00e61633 sll a2,a2,a4 +80002614: 00d86833 or a6,a6,a3 +80002618: 00c03633 snez a2,a2 +8000261c: 00c86833 or a6,a6,a2 +80002620: 00b355b3 srl a1,t1,a1 +80002624: 00a80833 add a6,a6,a0 +80002628: 00f585b3 add a1,a1,a5 +8000262c: 00a837b3 sltu a5,a6,a0 +80002630: 00f587b3 add a5,a1,a5 +80002634: 00080513 mv a0,a6 + FP_UNPACK_SEMIRAW_D (A, a); +80002638: 00090713 mv a4,s2 +8000263c: f4dff06f j 80002588 <__adddf3+0x15c> + FP_ADD_D (R, A, B); +80002640: 02000713 li a4,32 +80002644: 00b35833 srl a6,t1,a1 +80002648: 00000693 li a3,0 +8000264c: 00e58863 beq a1,a4,8000265c <__adddf3+0x230> +80002650: 04000693 li a3,64 +80002654: 40b685b3 sub a1,a3,a1 +80002658: 00b316b3 sll a3,t1,a1 +8000265c: 00c6e633 or a2,a3,a2 +80002660: 00c03633 snez a2,a2 +80002664: 00c86833 or a6,a6,a2 +80002668: 00000593 li a1,0 +8000266c: fb9ff06f j 80002624 <__adddf3+0x1f8> +80002670: 00c36833 or a6,t1,a2 +80002674: 01003833 snez a6,a6 +80002678: ff1ff06f j 80002668 <__adddf3+0x23c> +8000267c: 0e080a63 beqz a6,80002770 <__adddf3+0x344> +80002680: 08091e63 bnez s2,8000271c <__adddf3+0x2f0> +80002684: 00a7e6b3 or a3,a5,a0 +80002688: 02069263 bnez a3,800026ac <__adddf3+0x280> +8000268c: 7ff00793 li a5,2047 +80002690: 00f71863 bne a4,a5,800026a0 <__adddf3+0x274> +80002694: 00c36533 or a0,t1,a2 +80002698: 00000793 li a5,0 +8000269c: e20502e3 beqz a0,800024c0 <__adddf3+0x94> + FP_UNPACK_SEMIRAW_D (B, b); +800026a0: 00030793 mv a5,t1 +800026a4: 00060513 mv a0,a2 +800026a8: 11c0006f j 800027c4 <__adddf3+0x398> + FP_ADD_D (R, A, B); +800026ac: fff00693 li a3,-1 +800026b0: 00d81c63 bne a6,a3,800026c8 <__adddf3+0x29c> +800026b4: 00c50533 add a0,a0,a2 +800026b8: 006787b3 add a5,a5,t1 +800026bc: 00c53633 sltu a2,a0,a2 +800026c0: 00c787b3 add a5,a5,a2 +800026c4: ec5ff06f j 80002588 <__adddf3+0x15c> +800026c8: 7ff00693 li a3,2047 +800026cc: fff84813 not a6,a6 +800026d0: fcd702e3 beq a4,a3,80002694 <__adddf3+0x268> +800026d4: 03800693 li a3,56 +800026d8: 0906c663 blt a3,a6,80002764 <__adddf3+0x338> +800026dc: 01f00693 li a3,31 +800026e0: 0506ca63 blt a3,a6,80002734 <__adddf3+0x308> +800026e4: 02000593 li a1,32 +800026e8: 410585b3 sub a1,a1,a6 +800026ec: 010558b3 srl a7,a0,a6 +800026f0: 00b796b3 sll a3,a5,a1 +800026f4: 00b51533 sll a0,a0,a1 +800026f8: 0116e6b3 or a3,a3,a7 +800026fc: 00a03533 snez a0,a0 +80002700: 00a6e533 or a0,a3,a0 +80002704: 0107d833 srl a6,a5,a6 +80002708: 00c50533 add a0,a0,a2 +8000270c: 00680833 add a6,a6,t1 +80002710: 00c537b3 sltu a5,a0,a2 +80002714: 00f807b3 add a5,a6,a5 +80002718: e71ff06f j 80002588 <__adddf3+0x15c> +8000271c: 7ff00693 li a3,2047 +80002720: f6d70ae3 beq a4,a3,80002694 <__adddf3+0x268> +80002724: 008006b7 lui a3,0x800 +80002728: 41000833 neg a6,a6 +8000272c: 00d7e7b3 or a5,a5,a3 +80002730: fa5ff06f j 800026d4 <__adddf3+0x2a8> +80002734: 02000893 li a7,32 +80002738: 0107d6b3 srl a3,a5,a6 +8000273c: 00000593 li a1,0 +80002740: 01180863 beq a6,a7,80002750 <__adddf3+0x324> +80002744: 04000593 li a1,64 +80002748: 41058833 sub a6,a1,a6 +8000274c: 010795b3 sll a1,a5,a6 +80002750: 00a5e533 or a0,a1,a0 +80002754: 00a03533 snez a0,a0 +80002758: 00a6e533 or a0,a3,a0 +8000275c: 00000813 li a6,0 +80002760: fa9ff06f j 80002708 <__adddf3+0x2dc> +80002764: 00a7e533 or a0,a5,a0 +80002768: 00a03533 snez a0,a0 +8000276c: ff1ff06f j 8000275c <__adddf3+0x330> +80002770: 00190713 addi a4,s2,1 +80002774: 7ff77593 andi a1,a4,2047 +80002778: 00100693 li a3,1 +8000277c: 08b6c863 blt a3,a1,8000280c <__adddf3+0x3e0> +80002780: 00a7e733 or a4,a5,a0 +80002784: 06091463 bnez s2,800027ec <__adddf3+0x3c0> +80002788: 44070863 beqz a4,80002bd8 <__adddf3+0x7ac> +8000278c: 00c366b3 or a3,t1,a2 +80002790: 00000713 li a4,0 +80002794: 02068863 beqz a3,800027c4 <__adddf3+0x398> +80002798: 00c50633 add a2,a0,a2 +8000279c: 00a63533 sltu a0,a2,a0 +800027a0: 006787b3 add a5,a5,t1 +800027a4: 00a787b3 add a5,a5,a0 +800027a8: 00879693 slli a3,a5,0x8 +800027ac: 00060513 mv a0,a2 +800027b0: 0006da63 bgez a3,800027c4 <__adddf3+0x398> +800027b4: ff800737 lui a4,0xff800 +800027b8: fff70713 addi a4,a4,-1 # ff7fffff +800027bc: 00e7f7b3 and a5,a5,a4 +800027c0: 00100713 li a4,1 + FP_PACK_SEMIRAW_D (r, R); +800027c4: 00757693 andi a3,a0,7 +800027c8: ce068ce3 beqz a3,800024c0 <__adddf3+0x94> +800027cc: 00f57693 andi a3,a0,15 +800027d0: 00400613 li a2,4 +800027d4: cec686e3 beq a3,a2,800024c0 <__adddf3+0x94> +800027d8: 00450693 addi a3,a0,4 +800027dc: 00a6b533 sltu a0,a3,a0 +800027e0: 00a787b3 add a5,a5,a0 +800027e4: 00068513 mv a0,a3 +800027e8: cd9ff06f j 800024c0 <__adddf3+0x94> + FP_ADD_D (R, A, B); +800027ec: 3e070c63 beqz a4,80002be4 <__adddf3+0x7b8> +800027f0: 00c36833 or a6,t1,a2 +800027f4: de0800e3 beqz a6,800025d4 <__adddf3+0x1a8> +800027f8: 004007b7 lui a5,0x400 +800027fc: 00000513 li a0,0 +80002800: 7ff00713 li a4,2047 +80002804: 00000493 li s1,0 +80002808: cb9ff06f j 800024c0 <__adddf3+0x94> +8000280c: 7ff00693 li a3,2047 +80002810: cad704e3 beq a4,a3,800024b8 <__adddf3+0x8c> +80002814: 00c50633 add a2,a0,a2 +80002818: 00678833 add a6,a5,t1 +8000281c: 00a637b3 sltu a5,a2,a0 +80002820: 00f80833 add a6,a6,a5 +80002824: 01f81513 slli a0,a6,0x1f +80002828: 00165613 srli a2,a2,0x1 +8000282c: 00c56533 or a0,a0,a2 +80002830: 00185793 srli a5,a6,0x1 +80002834: f91ff06f j 800027c4 <__adddf3+0x398> +80002838: 0f005e63 blez a6,80002934 <__adddf3+0x508> +8000283c: 0a071263 bnez a4,800028e0 <__adddf3+0x4b4> +80002840: 00c36733 or a4,t1,a2 +80002844: c60700e3 beqz a4,800024a4 <__adddf3+0x78> +80002848: fff80693 addi a3,a6,-1 +8000284c: 02069e63 bnez a3,80002888 <__adddf3+0x45c> +80002850: 40c50633 sub a2,a0,a2 +80002854: 00c53533 sltu a0,a0,a2 +80002858: 406787b3 sub a5,a5,t1 +8000285c: 40a787b3 sub a5,a5,a0 +80002860: 00100713 li a4,1 +80002864: 00060513 mv a0,a2 +80002868: 00879693 slli a3,a5,0x8 +8000286c: f406dce3 bgez a3,800027c4 <__adddf3+0x398> +80002870: 00800437 lui s0,0x800 +80002874: fff40413 addi s0,s0,-1 # 7fffff +80002878: 0087f433 and s0,a5,s0 +8000287c: 00050993 mv s3,a0 +80002880: 00070913 mv s2,a4 +80002884: 2700006f j 80002af4 <__adddf3+0x6c8> +80002888: 7ff00713 li a4,2047 +8000288c: d4e800e3 beq a6,a4,800025cc <__adddf3+0x1a0> +80002890: 03800713 li a4,56 +80002894: 08d74a63 blt a4,a3,80002928 <__adddf3+0x4fc> +80002898: 01f00713 li a4,31 +8000289c: 04d74e63 blt a4,a3,800028f8 <__adddf3+0x4cc> +800028a0: 02000713 li a4,32 +800028a4: 40d70733 sub a4,a4,a3 +800028a8: 00d655b3 srl a1,a2,a3 +800028ac: 00e31833 sll a6,t1,a4 +800028b0: 00e61633 sll a2,a2,a4 +800028b4: 00b86833 or a6,a6,a1 +800028b8: 00c03633 snez a2,a2 +800028bc: 00c86833 or a6,a6,a2 +800028c0: 00d356b3 srl a3,t1,a3 +800028c4: 41050833 sub a6,a0,a6 +800028c8: 40d786b3 sub a3,a5,a3 +800028cc: 010537b3 sltu a5,a0,a6 +800028d0: 40f687b3 sub a5,a3,a5 +800028d4: 00080513 mv a0,a6 + FP_UNPACK_SEMIRAW_D (A, a); +800028d8: 00090713 mv a4,s2 +800028dc: f8dff06f j 80002868 <__adddf3+0x43c> + FP_ADD_D (R, A, B); +800028e0: 7ff00713 li a4,2047 +800028e4: cee904e3 beq s2,a4,800025cc <__adddf3+0x1a0> +800028e8: 00800737 lui a4,0x800 +800028ec: 00e36333 or t1,t1,a4 +800028f0: 00080693 mv a3,a6 +800028f4: f9dff06f j 80002890 <__adddf3+0x464> +800028f8: 02000713 li a4,32 +800028fc: 00d35833 srl a6,t1,a3 +80002900: 00000413 li s0,0 +80002904: 00e68863 beq a3,a4,80002914 <__adddf3+0x4e8> +80002908: 04000413 li s0,64 +8000290c: 40d406b3 sub a3,s0,a3 +80002910: 00d31433 sll s0,t1,a3 +80002914: 00c46633 or a2,s0,a2 +80002918: 00c03633 snez a2,a2 +8000291c: 00c86833 or a6,a6,a2 +80002920: 00000693 li a3,0 +80002924: fa1ff06f j 800028c4 <__adddf3+0x498> +80002928: 00c36833 or a6,t1,a2 +8000292c: 01003833 snez a6,a6 +80002930: ff1ff06f j 80002920 <__adddf3+0x4f4> +80002934: 0e080a63 beqz a6,80002a28 <__adddf3+0x5fc> +80002938: 08091e63 bnez s2,800029d4 <__adddf3+0x5a8> +8000293c: 00a7e6b3 or a3,a5,a0 +80002940: 02069063 bnez a3,80002960 <__adddf3+0x534> +80002944: 7ff00793 li a5,2047 +80002948: 00f71663 bne a4,a5,80002954 <__adddf3+0x528> +8000294c: 00c36533 or a0,t1,a2 +80002950: 2a050863 beqz a0,80002c00 <__adddf3+0x7d4> + FP_UNPACK_SEMIRAW_D (B, b); +80002954: 00030793 mv a5,t1 +80002958: 00060513 mv a0,a2 +8000295c: 0fc0006f j 80002a58 <__adddf3+0x62c> + FP_ADD_D (R, A, B); +80002960: fff00693 li a3,-1 +80002964: 00d81e63 bne a6,a3,80002980 <__adddf3+0x554> +80002968: 40a60533 sub a0,a2,a0 +8000296c: 40f307b3 sub a5,t1,a5 +80002970: 00a63633 sltu a2,a2,a0 +80002974: 40c787b3 sub a5,a5,a2 +80002978: 00088493 mv s1,a7 +8000297c: eedff06f j 80002868 <__adddf3+0x43c> +80002980: 7ff00693 li a3,2047 +80002984: fff84813 not a6,a6 +80002988: fcd702e3 beq a4,a3,8000294c <__adddf3+0x520> +8000298c: 03800693 li a3,56 +80002990: 0906c663 blt a3,a6,80002a1c <__adddf3+0x5f0> +80002994: 01f00693 li a3,31 +80002998: 0506ca63 blt a3,a6,800029ec <__adddf3+0x5c0> +8000299c: 02000593 li a1,32 +800029a0: 410585b3 sub a1,a1,a6 +800029a4: 01055e33 srl t3,a0,a6 +800029a8: 00b796b3 sll a3,a5,a1 +800029ac: 00b51533 sll a0,a0,a1 +800029b0: 01c6e6b3 or a3,a3,t3 +800029b4: 00a03533 snez a0,a0 +800029b8: 00a6e533 or a0,a3,a0 +800029bc: 0107d833 srl a6,a5,a6 +800029c0: 40a60533 sub a0,a2,a0 +800029c4: 41030833 sub a6,t1,a6 +800029c8: 00a637b3 sltu a5,a2,a0 +800029cc: 40f807b3 sub a5,a6,a5 +800029d0: fa9ff06f j 80002978 <__adddf3+0x54c> +800029d4: 7ff00693 li a3,2047 +800029d8: f6d70ae3 beq a4,a3,8000294c <__adddf3+0x520> +800029dc: 008006b7 lui a3,0x800 +800029e0: 41000833 neg a6,a6 +800029e4: 00d7e7b3 or a5,a5,a3 +800029e8: fa5ff06f j 8000298c <__adddf3+0x560> +800029ec: 02000e13 li t3,32 +800029f0: 0107d6b3 srl a3,a5,a6 +800029f4: 00000593 li a1,0 +800029f8: 01c80863 beq a6,t3,80002a08 <__adddf3+0x5dc> +800029fc: 04000593 li a1,64 +80002a00: 41058833 sub a6,a1,a6 +80002a04: 010795b3 sll a1,a5,a6 +80002a08: 00a5e533 or a0,a1,a0 +80002a0c: 00a03533 snez a0,a0 +80002a10: 00a6e533 or a0,a3,a0 +80002a14: 00000813 li a6,0 +80002a18: fa9ff06f j 800029c0 <__adddf3+0x594> +80002a1c: 00a7e533 or a0,a5,a0 +80002a20: 00a03533 snez a0,a0 +80002a24: ff1ff06f j 80002a14 <__adddf3+0x5e8> +80002a28: 00190713 addi a4,s2,1 +80002a2c: 7ff77713 andi a4,a4,2047 +80002a30: 00100693 li a3,1 +80002a34: 08e6ca63 blt a3,a4,80002ac8 <__adddf3+0x69c> +80002a38: 00a7e6b3 or a3,a5,a0 +80002a3c: 00c36733 or a4,t1,a2 +80002a40: 06091463 bnez s2,80002aa8 <__adddf3+0x67c> +80002a44: 00069e63 bnez a3,80002a60 <__adddf3+0x634> +80002a48: 1c070263 beqz a4,80002c0c <__adddf3+0x7e0> + FP_UNPACK_SEMIRAW_D (B, b); +80002a4c: 00030793 mv a5,t1 +80002a50: 00060513 mv a0,a2 + FP_ADD_D (R, A, B); +80002a54: 00000713 li a4,0 +80002a58: 00088493 mv s1,a7 +80002a5c: d69ff06f j 800027c4 <__adddf3+0x398> +80002a60: 04070063 beqz a4,80002aa0 <__adddf3+0x674> +80002a64: 40c506b3 sub a3,a0,a2 +80002a68: 00d535b3 sltu a1,a0,a3 +80002a6c: 40678733 sub a4,a5,t1 +80002a70: 40b70733 sub a4,a4,a1 +80002a74: 00871593 slli a1,a4,0x8 +80002a78: 0005dc63 bgez a1,80002a90 <__adddf3+0x664> +80002a7c: 40a60533 sub a0,a2,a0 +80002a80: 40f307b3 sub a5,t1,a5 +80002a84: 00a63633 sltu a2,a2,a0 +80002a88: 40c787b3 sub a5,a5,a2 +80002a8c: fc9ff06f j 80002a54 <__adddf3+0x628> +80002a90: 00e6e533 or a0,a3,a4 +80002a94: 0c050a63 beqz a0,80002b68 <__adddf3+0x73c> +80002a98: 00070793 mv a5,a4 +80002a9c: 00068513 mv a0,a3 +80002aa0: 00000713 li a4,0 +80002aa4: d21ff06f j 800027c4 <__adddf3+0x398> +80002aa8: 00069c63 bnez a3,80002ac0 <__adddf3+0x694> +80002aac: 16070863 beqz a4,80002c1c <__adddf3+0x7f0> + FP_UNPACK_SEMIRAW_D (B, b); +80002ab0: 00030793 mv a5,t1 +80002ab4: 00060513 mv a0,a2 + FP_ADD_D (R, A, B); +80002ab8: 00088493 mv s1,a7 +80002abc: b19ff06f j 800025d4 <__adddf3+0x1a8> +80002ac0: b0070ae3 beqz a4,800025d4 <__adddf3+0x1a8> +80002ac4: d35ff06f j 800027f8 <__adddf3+0x3cc> +80002ac8: 40c509b3 sub s3,a0,a2 +80002acc: 40678433 sub s0,a5,t1 +80002ad0: 01353833 sltu a6,a0,s3 +80002ad4: 41040433 sub s0,s0,a6 +80002ad8: 00841713 slli a4,s0,0x8 +80002adc: 08075263 bgez a4,80002b60 <__adddf3+0x734> +80002ae0: 40a609b3 sub s3,a2,a0 +80002ae4: 40f30433 sub s0,t1,a5 +80002ae8: 013637b3 sltu a5,a2,s3 +80002aec: 40f40433 sub s0,s0,a5 +80002af0: 00088493 mv s1,a7 +80002af4: 06040e63 beqz s0,80002b70 <__adddf3+0x744> +80002af8: 00040513 mv a0,s0 +80002afc: 5f9000ef jal ra,800038f4 <__clzsi2> +80002b00: ff850713 addi a4,a0,-8 +80002b04: 01f00793 li a5,31 +80002b08: 06e7cc63 blt a5,a4,80002b80 <__adddf3+0x754> +80002b0c: 02000793 li a5,32 +80002b10: 40e787b3 sub a5,a5,a4 +80002b14: 00e41433 sll s0,s0,a4 +80002b18: 00f9d7b3 srl a5,s3,a5 +80002b1c: 0087e433 or s0,a5,s0 +80002b20: 00e99533 sll a0,s3,a4 +80002b24: 0b274063 blt a4,s2,80002bc4 <__adddf3+0x798> +80002b28: 41270733 sub a4,a4,s2 +80002b2c: 00170793 addi a5,a4,1 # 800001 +80002b30: 01f00693 li a3,31 +80002b34: 04f6ce63 blt a3,a5,80002b90 <__adddf3+0x764> +80002b38: 02000713 li a4,32 +80002b3c: 40f70733 sub a4,a4,a5 +80002b40: 00f55633 srl a2,a0,a5 +80002b44: 00e416b3 sll a3,s0,a4 +80002b48: 00e51533 sll a0,a0,a4 +80002b4c: 00c6e6b3 or a3,a3,a2 +80002b50: 00a03533 snez a0,a0 +80002b54: 00a6e533 or a0,a3,a0 +80002b58: 00f457b3 srl a5,s0,a5 +80002b5c: f45ff06f j 80002aa0 <__adddf3+0x674> +80002b60: 0089e533 or a0,s3,s0 +80002b64: f80518e3 bnez a0,80002af4 <__adddf3+0x6c8> +80002b68: 00000793 li a5,0 +80002b6c: 0a80006f j 80002c14 <__adddf3+0x7e8> +80002b70: 00098513 mv a0,s3 +80002b74: 581000ef jal ra,800038f4 <__clzsi2> +80002b78: 02050513 addi a0,a0,32 +80002b7c: f85ff06f j 80002b00 <__adddf3+0x6d4> +80002b80: fd850413 addi s0,a0,-40 +80002b84: 00899433 sll s0,s3,s0 +80002b88: 00000513 li a0,0 +80002b8c: f99ff06f j 80002b24 <__adddf3+0x6f8> +80002b90: fe170713 addi a4,a4,-31 +80002b94: 02000613 li a2,32 +80002b98: 00e45733 srl a4,s0,a4 +80002b9c: 00000693 li a3,0 +80002ba0: 00c78863 beq a5,a2,80002bb0 <__adddf3+0x784> +80002ba4: 04000693 li a3,64 +80002ba8: 40f686b3 sub a3,a3,a5 +80002bac: 00d416b3 sll a3,s0,a3 +80002bb0: 00d56533 or a0,a0,a3 +80002bb4: 00a03533 snez a0,a0 +80002bb8: 00a76533 or a0,a4,a0 +80002bbc: 00000793 li a5,0 +80002bc0: ee1ff06f j 80002aa0 <__adddf3+0x674> +80002bc4: ff8007b7 lui a5,0xff800 +80002bc8: fff78793 addi a5,a5,-1 # ff7fffff +80002bcc: 40e90733 sub a4,s2,a4 +80002bd0: 00f477b3 and a5,s0,a5 +80002bd4: bf1ff06f j 800027c4 <__adddf3+0x398> + FP_UNPACK_SEMIRAW_D (B, b); +80002bd8: 00030793 mv a5,t1 +80002bdc: 00060513 mv a0,a2 +80002be0: ec1ff06f j 80002aa0 <__adddf3+0x674> +80002be4: 00030793 mv a5,t1 +80002be8: 00060513 mv a0,a2 +80002bec: 9e9ff06f j 800025d4 <__adddf3+0x1a8> +80002bf0: 00000793 li a5,0 +80002bf4: 00000513 li a0,0 + FP_ADD_D (R, A, B); +80002bf8: 7ff00713 li a4,2047 +80002bfc: 8c5ff06f j 800024c0 <__adddf3+0x94> +80002c00: 00000793 li a5,0 +80002c04: 00088493 mv s1,a7 +80002c08: 8b9ff06f j 800024c0 <__adddf3+0x94> +80002c0c: 00000793 li a5,0 +80002c10: 00000513 li a0,0 +80002c14: 00000713 li a4,0 +80002c18: bedff06f j 80002804 <__adddf3+0x3d8> +80002c1c: 00000513 li a0,0 +80002c20: 004007b7 lui a5,0x400 +80002c24: bddff06f j 80002800 <__adddf3+0x3d4> +80002c28: 00000793 li a5,0 +80002c2c: 00000513 li a0,0 +80002c30: 8b1ff06f j 800024e0 <__adddf3+0xb4> + +80002c34 <__muldf3>: +#include "soft-fp.h" +#include "double.h" + +DFtype +__muldf3 (DFtype a, DFtype b) +{ +80002c34: fd010113 addi sp,sp,-48 +80002c38: 03212023 sw s2,32(sp) +80002c3c: 01512a23 sw s5,20(sp) + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_D (A, a); +80002c40: 00100937 lui s2,0x100 +80002c44: 0145da93 srli s5,a1,0x14 +{ +80002c48: 01312e23 sw s3,28(sp) +80002c4c: 01412c23 sw s4,24(sp) +80002c50: 01612823 sw s6,16(sp) +80002c54: 01712623 sw s7,12(sp) + FP_UNPACK_D (A, a); +80002c58: fff90913 addi s2,s2,-1 # fffff +{ +80002c5c: 02112623 sw ra,44(sp) +80002c60: 02812423 sw s0,40(sp) +80002c64: 02912223 sw s1,36(sp) + FP_UNPACK_D (A, a); +80002c68: 7ffafa93 andi s5,s5,2047 +{ +80002c6c: 00050b13 mv s6,a0 +80002c70: 00060b93 mv s7,a2 +80002c74: 00068a13 mv s4,a3 + FP_UNPACK_D (A, a); +80002c78: 00b97933 and s2,s2,a1 +80002c7c: 01f5d993 srli s3,a1,0x1f +80002c80: 0a0a8663 beqz s5,80002d2c <__muldf3+0xf8> +80002c84: 7ff00793 li a5,2047 +80002c88: 10fa8463 beq s5,a5,80002d90 <__muldf3+0x15c> +80002c8c: 00800437 lui s0,0x800 +80002c90: 00391913 slli s2,s2,0x3 +80002c94: 00896933 or s2,s2,s0 +80002c98: 01d55413 srli s0,a0,0x1d +80002c9c: 01246433 or s0,s0,s2 +80002ca0: 00351493 slli s1,a0,0x3 +80002ca4: c01a8a93 addi s5,s5,-1023 +80002ca8: 00000b13 li s6,0 + FP_UNPACK_D (B, b); +80002cac: 014a5513 srli a0,s4,0x14 +80002cb0: 00100937 lui s2,0x100 +80002cb4: fff90913 addi s2,s2,-1 # fffff +80002cb8: 7ff57513 andi a0,a0,2047 +80002cbc: 01497933 and s2,s2,s4 +80002cc0: 000b8713 mv a4,s7 +80002cc4: 01fa5a13 srli s4,s4,0x1f +80002cc8: 10050263 beqz a0,80002dcc <__muldf3+0x198> +80002ccc: 7ff00793 li a5,2047 +80002cd0: 16f50263 beq a0,a5,80002e34 <__muldf3+0x200> +80002cd4: 008007b7 lui a5,0x800 +80002cd8: 00391913 slli s2,s2,0x3 +80002cdc: 00f96933 or s2,s2,a5 +80002ce0: 01dbd793 srli a5,s7,0x1d +80002ce4: 0127e7b3 or a5,a5,s2 +80002ce8: 003b9713 slli a4,s7,0x3 +80002cec: c0150513 addi a0,a0,-1023 +80002cf0: 00000693 li a3,0 + FP_MUL_D (R, A, B); +80002cf4: 002b1593 slli a1,s6,0x2 +80002cf8: 00d5e5b3 or a1,a1,a3 +80002cfc: 00aa8533 add a0,s5,a0 +80002d00: fff58593 addi a1,a1,-1 # ffffff +80002d04: 00e00893 li a7,14 +80002d08: 0149c633 xor a2,s3,s4 +80002d0c: 00150813 addi a6,a0,1 +80002d10: 14b8ee63 bltu a7,a1,80002e6c <__muldf3+0x238> +80002d14: 80004537 lui a0,0x80004 +80002d18: 00259593 slli a1,a1,0x2 +80002d1c: b0050513 addi a0,a0,-1280 # 80003b00 +80002d20: 00a585b3 add a1,a1,a0 +80002d24: 0005a583 lw a1,0(a1) +80002d28: 00058067 jr a1 + FP_UNPACK_D (A, a); +80002d2c: 00a96433 or s0,s2,a0 +80002d30: 06040e63 beqz s0,80002dac <__muldf3+0x178> +80002d34: 04090063 beqz s2,80002d74 <__muldf3+0x140> +80002d38: 00090513 mv a0,s2 +80002d3c: 3b9000ef jal ra,800038f4 <__clzsi2> +80002d40: ff550793 addi a5,a0,-11 +80002d44: 01c00713 li a4,28 +80002d48: 02f74c63 blt a4,a5,80002d80 <__muldf3+0x14c> +80002d4c: 01d00413 li s0,29 +80002d50: ff850493 addi s1,a0,-8 +80002d54: 40f40433 sub s0,s0,a5 +80002d58: 00991933 sll s2,s2,s1 +80002d5c: 008b5433 srl s0,s6,s0 +80002d60: 01246433 or s0,s0,s2 +80002d64: 009b14b3 sll s1,s6,s1 +80002d68: c0d00a93 li s5,-1011 +80002d6c: 40aa8ab3 sub s5,s5,a0 +80002d70: f39ff06f j 80002ca8 <__muldf3+0x74> +80002d74: 381000ef jal ra,800038f4 <__clzsi2> +80002d78: 02050513 addi a0,a0,32 +80002d7c: fc5ff06f j 80002d40 <__muldf3+0x10c> +80002d80: fd850413 addi s0,a0,-40 +80002d84: 008b1433 sll s0,s6,s0 +80002d88: 00000493 li s1,0 +80002d8c: fddff06f j 80002d68 <__muldf3+0x134> +80002d90: 00a96433 or s0,s2,a0 +80002d94: 02040463 beqz s0,80002dbc <__muldf3+0x188> +80002d98: 00050493 mv s1,a0 +80002d9c: 00090413 mv s0,s2 +80002da0: 7ff00a93 li s5,2047 +80002da4: 00300b13 li s6,3 +80002da8: f05ff06f j 80002cac <__muldf3+0x78> +80002dac: 00000493 li s1,0 +80002db0: 00000a93 li s5,0 +80002db4: 00100b13 li s6,1 +80002db8: ef5ff06f j 80002cac <__muldf3+0x78> +80002dbc: 00000493 li s1,0 +80002dc0: 7ff00a93 li s5,2047 +80002dc4: 00200b13 li s6,2 +80002dc8: ee5ff06f j 80002cac <__muldf3+0x78> + FP_UNPACK_D (B, b); +80002dcc: 017967b3 or a5,s2,s7 +80002dd0: 06078e63 beqz a5,80002e4c <__muldf3+0x218> +80002dd4: 04090063 beqz s2,80002e14 <__muldf3+0x1e0> +80002dd8: 00090513 mv a0,s2 +80002ddc: 319000ef jal ra,800038f4 <__clzsi2> +80002de0: ff550693 addi a3,a0,-11 +80002de4: 01c00793 li a5,28 +80002de8: 02d7ce63 blt a5,a3,80002e24 <__muldf3+0x1f0> +80002dec: 01d00793 li a5,29 +80002df0: ff850713 addi a4,a0,-8 +80002df4: 40d787b3 sub a5,a5,a3 +80002df8: 00e91933 sll s2,s2,a4 +80002dfc: 00fbd7b3 srl a5,s7,a5 +80002e00: 0127e7b3 or a5,a5,s2 +80002e04: 00eb9733 sll a4,s7,a4 +80002e08: c0d00693 li a3,-1011 +80002e0c: 40a68533 sub a0,a3,a0 +80002e10: ee1ff06f j 80002cf0 <__muldf3+0xbc> +80002e14: 000b8513 mv a0,s7 +80002e18: 2dd000ef jal ra,800038f4 <__clzsi2> +80002e1c: 02050513 addi a0,a0,32 +80002e20: fc1ff06f j 80002de0 <__muldf3+0x1ac> +80002e24: fd850793 addi a5,a0,-40 +80002e28: 00fb97b3 sll a5,s7,a5 +80002e2c: 00000713 li a4,0 +80002e30: fd9ff06f j 80002e08 <__muldf3+0x1d4> +80002e34: 017967b3 or a5,s2,s7 +80002e38: 02078263 beqz a5,80002e5c <__muldf3+0x228> +80002e3c: 00090793 mv a5,s2 +80002e40: 7ff00513 li a0,2047 +80002e44: 00300693 li a3,3 +80002e48: eadff06f j 80002cf4 <__muldf3+0xc0> +80002e4c: 00000713 li a4,0 +80002e50: 00000513 li a0,0 +80002e54: 00100693 li a3,1 +80002e58: e9dff06f j 80002cf4 <__muldf3+0xc0> +80002e5c: 00000713 li a4,0 +80002e60: 7ff00513 li a0,2047 +80002e64: 00200693 li a3,2 +80002e68: e8dff06f j 80002cf4 <__muldf3+0xc0> +80002e6c: 00010fb7 lui t6,0x10 +80002e70: ffff8f13 addi t5,t6,-1 # ffff + FP_MUL_D (R, A, B); +80002e74: 0104d693 srli a3,s1,0x10 +80002e78: 01075313 srli t1,a4,0x10 +80002e7c: 01e4f4b3 and s1,s1,t5 +80002e80: 01e77733 and a4,a4,t5 +80002e84: 029308b3 mul a7,t1,s1 +80002e88: 029705b3 mul a1,a4,s1 +80002e8c: 02e682b3 mul t0,a3,a4 +80002e90: 00588e33 add t3,a7,t0 +80002e94: 0105d893 srli a7,a1,0x10 +80002e98: 01c888b3 add a7,a7,t3 +80002e9c: 02668eb3 mul t4,a3,t1 +80002ea0: 0058f463 bleu t0,a7,80002ea8 <__muldf3+0x274> +80002ea4: 01fe8eb3 add t4,t4,t6 +80002ea8: 0108d913 srli s2,a7,0x10 +80002eac: 01e8f8b3 and a7,a7,t5 +80002eb0: 0107df93 srli t6,a5,0x10 +80002eb4: 01e5f5b3 and a1,a1,t5 +80002eb8: 01e7f3b3 and t2,a5,t5 +80002ebc: 01089893 slli a7,a7,0x10 +80002ec0: 00b888b3 add a7,a7,a1 +80002ec4: 027687b3 mul a5,a3,t2 +80002ec8: 029385b3 mul a1,t2,s1 +80002ecc: 029f84b3 mul s1,t6,s1 +80002ed0: 00f48e33 add t3,s1,a5 +80002ed4: 0105d493 srli s1,a1,0x10 +80002ed8: 01c484b3 add s1,s1,t3 +80002edc: 03f686b3 mul a3,a3,t6 +80002ee0: 00f4f663 bleu a5,s1,80002eec <__muldf3+0x2b8> +80002ee4: 000107b7 lui a5,0x10 +80002ee8: 00f686b3 add a3,a3,a5 +80002eec: 0104df13 srli t5,s1,0x10 +80002ef0: 000109b7 lui s3,0x10 +80002ef4: 00df0f33 add t5,t5,a3 +80002ef8: fff98693 addi a3,s3,-1 # ffff +80002efc: 00d4f4b3 and s1,s1,a3 +80002f00: 00d5f5b3 and a1,a1,a3 +80002f04: 01045793 srli a5,s0,0x10 +80002f08: 01049493 slli s1,s1,0x10 +80002f0c: 00d47433 and s0,s0,a3 +80002f10: 00b484b3 add s1,s1,a1 +80002f14: 028706b3 mul a3,a4,s0 +80002f18: 00990933 add s2,s2,s1 +80002f1c: 02e78e33 mul t3,a5,a4 +80002f20: 028305b3 mul a1,t1,s0 +80002f24: 02f30733 mul a4,t1,a5 +80002f28: 01c58333 add t1,a1,t3 +80002f2c: 0106d593 srli a1,a3,0x10 +80002f30: 006585b3 add a1,a1,t1 +80002f34: 01c5f463 bleu t3,a1,80002f3c <__muldf3+0x308> +80002f38: 01370733 add a4,a4,s3 +80002f3c: 0105d313 srli t1,a1,0x10 +80002f40: 000109b7 lui s3,0x10 +80002f44: 00e302b3 add t0,t1,a4 +80002f48: fff98713 addi a4,s3,-1 # ffff +80002f4c: 00e5f5b3 and a1,a1,a4 +80002f50: 00e6f6b3 and a3,a3,a4 +80002f54: 02838333 mul t1,t2,s0 +80002f58: 01059593 slli a1,a1,0x10 +80002f5c: 00d585b3 add a1,a1,a3 +80002f60: 02778733 mul a4,a5,t2 +80002f64: 028f8433 mul s0,t6,s0 +80002f68: 02ff8e33 mul t3,t6,a5 +80002f6c: 00e40433 add s0,s0,a4 +80002f70: 01035793 srli a5,t1,0x10 +80002f74: 00878433 add s0,a5,s0 +80002f78: 00e47463 bleu a4,s0,80002f80 <__muldf3+0x34c> +80002f7c: 013e0e33 add t3,t3,s3 +80002f80: 000107b7 lui a5,0x10 +80002f84: fff78793 addi a5,a5,-1 # ffff +80002f88: 00f476b3 and a3,s0,a5 +80002f8c: 00f37333 and t1,t1,a5 +80002f90: 01069693 slli a3,a3,0x10 +80002f94: 012e8eb3 add t4,t4,s2 +80002f98: 006686b3 add a3,a3,t1 +80002f9c: 009eb4b3 sltu s1,t4,s1 +80002fa0: 01e686b3 add a3,a3,t5 +80002fa4: 009687b3 add a5,a3,s1 +80002fa8: 00be8eb3 add t4,t4,a1 +80002fac: 00beb5b3 sltu a1,t4,a1 +80002fb0: 00578333 add t1,a5,t0 +80002fb4: 00b30fb3 add t6,t1,a1 +80002fb8: 01e6b6b3 sltu a3,a3,t5 +80002fbc: 0097b7b3 sltu a5,a5,s1 +80002fc0: 00f6e7b3 or a5,a3,a5 +80002fc4: 01045413 srli s0,s0,0x10 +80002fc8: 00533333 sltu t1,t1,t0 +80002fcc: 00bfb5b3 sltu a1,t6,a1 +80002fd0: 008787b3 add a5,a5,s0 +80002fd4: 00b365b3 or a1,t1,a1 +80002fd8: 00b787b3 add a5,a5,a1 +80002fdc: 01c787b3 add a5,a5,t3 +80002fe0: 017fd713 srli a4,t6,0x17 +80002fe4: 00979793 slli a5,a5,0x9 +80002fe8: 00e7e7b3 or a5,a5,a4 +80002fec: 009e9713 slli a4,t4,0x9 +80002ff0: 01176733 or a4,a4,a7 +80002ff4: 00e03733 snez a4,a4 +80002ff8: 017ede93 srli t4,t4,0x17 +80002ffc: 009f9693 slli a3,t6,0x9 +80003000: 01d76733 or a4,a4,t4 +80003004: 00d76733 or a4,a4,a3 +80003008: 00779693 slli a3,a5,0x7 +8000300c: 1006da63 bgez a3,80003120 <__muldf3+0x4ec> +80003010: 00175693 srli a3,a4,0x1 +80003014: 00177713 andi a4,a4,1 +80003018: 00e6e733 or a4,a3,a4 +8000301c: 01f79693 slli a3,a5,0x1f +80003020: 00d76733 or a4,a4,a3 +80003024: 0017d793 srli a5,a5,0x1 + FP_PACK_D (r, R); +80003028: 3ff80593 addi a1,a6,1023 +8000302c: 0eb05e63 blez a1,80003128 <__muldf3+0x4f4> +80003030: 00777693 andi a3,a4,7 +80003034: 02068063 beqz a3,80003054 <__muldf3+0x420> +80003038: 00f77693 andi a3,a4,15 +8000303c: 00400513 li a0,4 +80003040: 00a68a63 beq a3,a0,80003054 <__muldf3+0x420> +80003044: 00470693 addi a3,a4,4 +80003048: 00e6b733 sltu a4,a3,a4 +8000304c: 00e787b3 add a5,a5,a4 +80003050: 00068713 mv a4,a3 +80003054: 00779693 slli a3,a5,0x7 +80003058: 0006da63 bgez a3,8000306c <__muldf3+0x438> +8000305c: ff0006b7 lui a3,0xff000 +80003060: fff68693 addi a3,a3,-1 # feffffff +80003064: 00d7f7b3 and a5,a5,a3 +80003068: 40080593 addi a1,a6,1024 +8000306c: 7fe00693 li a3,2046 +80003070: 16b6ce63 blt a3,a1,800031ec <__muldf3+0x5b8> +80003074: 00375693 srli a3,a4,0x3 +80003078: 01d79713 slli a4,a5,0x1d +8000307c: 00d76733 or a4,a4,a3 +80003080: 0037d793 srli a5,a5,0x3 +80003084: 001006b7 lui a3,0x100 +80003088: fff68693 addi a3,a3,-1 # fffff +8000308c: 00d7f7b3 and a5,a5,a3 +80003090: 7ff5f693 andi a3,a1,2047 +80003094: 801005b7 lui a1,0x80100 +80003098: fff58593 addi a1,a1,-1 # 800fffff +8000309c: 01469693 slli a3,a3,0x14 +800030a0: 00b7f7b3 and a5,a5,a1 + FP_HANDLE_EXCEPTIONS; + + return r; +} +800030a4: 02c12083 lw ra,44(sp) +800030a8: 02812403 lw s0,40(sp) + FP_PACK_D (r, R); +800030ac: 01f61613 slli a2,a2,0x1f +800030b0: 00d7e7b3 or a5,a5,a3 +800030b4: 00c7e6b3 or a3,a5,a2 +} +800030b8: 02412483 lw s1,36(sp) +800030bc: 02012903 lw s2,32(sp) +800030c0: 01c12983 lw s3,28(sp) +800030c4: 01812a03 lw s4,24(sp) +800030c8: 01412a83 lw s5,20(sp) +800030cc: 01012b03 lw s6,16(sp) +800030d0: 00c12b83 lw s7,12(sp) +800030d4: 00070513 mv a0,a4 +800030d8: 00068593 mv a1,a3 +800030dc: 03010113 addi sp,sp,48 +800030e0: 00008067 ret + FP_UNPACK_D (A, a); +800030e4: 00098613 mv a2,s3 + FP_MUL_D (R, A, B); +800030e8: 00040793 mv a5,s0 +800030ec: 00048713 mv a4,s1 +800030f0: 000b0693 mv a3,s6 + FP_PACK_D (r, R); +800030f4: 00200593 li a1,2 +800030f8: 0eb68a63 beq a3,a1,800031ec <__muldf3+0x5b8> +800030fc: 00300593 li a1,3 +80003100: 0cb68c63 beq a3,a1,800031d8 <__muldf3+0x5a4> +80003104: 00100593 li a1,1 +80003108: f2b690e3 bne a3,a1,80003028 <__muldf3+0x3f4> +8000310c: 00000793 li a5,0 +80003110: 00000713 li a4,0 +80003114: 0880006f j 8000319c <__muldf3+0x568> + FP_UNPACK_D (B, b); +80003118: 000a0613 mv a2,s4 +8000311c: fd9ff06f j 800030f4 <__muldf3+0x4c0> + FP_MUL_D (R, A, B); +80003120: 00050813 mv a6,a0 +80003124: f05ff06f j 80003028 <__muldf3+0x3f4> + FP_PACK_D (r, R); +80003128: 00100513 li a0,1 +8000312c: 40b50533 sub a0,a0,a1 +80003130: 03800693 li a3,56 +80003134: fca6cce3 blt a3,a0,8000310c <__muldf3+0x4d8> +80003138: 01f00693 li a3,31 +8000313c: 06a6c463 blt a3,a0,800031a4 <__muldf3+0x570> +80003140: 41e80813 addi a6,a6,1054 +80003144: 010796b3 sll a3,a5,a6 +80003148: 00a755b3 srl a1,a4,a0 +8000314c: 01071733 sll a4,a4,a6 +80003150: 00b6e6b3 or a3,a3,a1 +80003154: 00e03733 snez a4,a4 +80003158: 00e6e733 or a4,a3,a4 +8000315c: 00a7d7b3 srl a5,a5,a0 +80003160: 00777693 andi a3,a4,7 +80003164: 02068063 beqz a3,80003184 <__muldf3+0x550> +80003168: 00f77693 andi a3,a4,15 +8000316c: 00400593 li a1,4 +80003170: 00b68a63 beq a3,a1,80003184 <__muldf3+0x550> +80003174: 00470693 addi a3,a4,4 +80003178: 00e6b733 sltu a4,a3,a4 +8000317c: 00e787b3 add a5,a5,a4 +80003180: 00068713 mv a4,a3 +80003184: 00879693 slli a3,a5,0x8 +80003188: 0606ca63 bltz a3,800031fc <__muldf3+0x5c8> +8000318c: 01d79693 slli a3,a5,0x1d +80003190: 00375713 srli a4,a4,0x3 +80003194: 00e6e733 or a4,a3,a4 +80003198: 0037d793 srli a5,a5,0x3 +8000319c: 00000593 li a1,0 +800031a0: ee5ff06f j 80003084 <__muldf3+0x450> +800031a4: fe100693 li a3,-31 +800031a8: 40b686b3 sub a3,a3,a1 +800031ac: 02000893 li a7,32 +800031b0: 00d7d6b3 srl a3,a5,a3 +800031b4: 00000593 li a1,0 +800031b8: 01150663 beq a0,a7,800031c4 <__muldf3+0x590> +800031bc: 43e80813 addi a6,a6,1086 +800031c0: 010795b3 sll a1,a5,a6 +800031c4: 00e5e733 or a4,a1,a4 +800031c8: 00e03733 snez a4,a4 +800031cc: 00e6e733 or a4,a3,a4 +800031d0: 00000793 li a5,0 +800031d4: f8dff06f j 80003160 <__muldf3+0x52c> +800031d8: 000807b7 lui a5,0x80 +800031dc: 00000713 li a4,0 +800031e0: 7ff00593 li a1,2047 +800031e4: 00000613 li a2,0 +800031e8: e9dff06f j 80003084 <__muldf3+0x450> +800031ec: 00000793 li a5,0 +800031f0: 00000713 li a4,0 +800031f4: 7ff00593 li a1,2047 +800031f8: e8dff06f j 80003084 <__muldf3+0x450> +800031fc: 00000793 li a5,0 +80003200: 00000713 li a4,0 +80003204: 00100593 li a1,1 +80003208: e7dff06f j 80003084 <__muldf3+0x450> + +8000320c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000320c: fe010113 addi sp,sp,-32 +80003210: 00912a23 sw s1,20(sp) +80003214: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80003218: 008004b7 lui s1,0x800 +8000321c: 01755913 srli s2,a0,0x17 +{ +80003220: 01312623 sw s3,12(sp) +80003224: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80003228: fff48493 addi s1,s1,-1 # 7fffff +{ +8000322c: 00112e23 sw ra,28(sp) +80003230: 00812c23 sw s0,24(sp) +80003234: 01412423 sw s4,8(sp) +80003238: 0ff97913 andi s2,s2,255 +8000323c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80003240: 00a4f4b3 and s1,s1,a0 +80003244: 01f55993 srli s3,a0,0x1f +80003248: 08090863 beqz s2,800032d8 <__mulsf3+0xcc> +8000324c: 0ff00793 li a5,255 +80003250: 0af90463 beq s2,a5,800032f8 <__mulsf3+0xec> +80003254: 00349493 slli s1,s1,0x3 +80003258: 040007b7 lui a5,0x4000 +8000325c: 00f4e4b3 or s1,s1,a5 +80003260: f8190913 addi s2,s2,-127 +80003264: 00000a13 li s4,0 +80003268: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +8000326c: 00800437 lui s0,0x800 +80003270: fff40413 addi s0,s0,-1 # 7fffff +80003274: 0ff57513 andi a0,a0,255 +80003278: 01547433 and s0,s0,s5 +8000327c: 01fada93 srli s5,s5,0x1f +80003280: 08050c63 beqz a0,80003318 <__mulsf3+0x10c> +80003284: 0ff00793 li a5,255 +80003288: 0af50863 beq a0,a5,80003338 <__mulsf3+0x12c> +8000328c: 00341413 slli s0,s0,0x3 +80003290: 040007b7 lui a5,0x4000 +80003294: 00f46433 or s0,s0,a5 +80003298: f8150513 addi a0,a0,-127 +8000329c: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800032a0: 002a1793 slli a5,s4,0x2 +800032a4: 00d7e7b3 or a5,a5,a3 +800032a8: 00a90533 add a0,s2,a0 +800032ac: fff78793 addi a5,a5,-1 # 3ffffff +800032b0: 00e00713 li a4,14 +800032b4: 0159c633 xor a2,s3,s5 +800032b8: 00150813 addi a6,a0,1 +800032bc: 08f76e63 bltu a4,a5,80003358 <__mulsf3+0x14c> +800032c0: 80004737 lui a4,0x80004 +800032c4: 00279793 slli a5,a5,0x2 +800032c8: b3c70713 addi a4,a4,-1220 # 80003b3c +800032cc: 00e787b3 add a5,a5,a4 +800032d0: 0007a783 lw a5,0(a5) +800032d4: 00078067 jr a5 + FP_UNPACK_S (A, a); +800032d8: 02048a63 beqz s1,8000330c <__mulsf3+0x100> +800032dc: 00048513 mv a0,s1 +800032e0: 614000ef jal ra,800038f4 <__clzsi2> +800032e4: ffb50793 addi a5,a0,-5 +800032e8: f8a00913 li s2,-118 +800032ec: 00f494b3 sll s1,s1,a5 +800032f0: 40a90933 sub s2,s2,a0 +800032f4: f71ff06f j 80003264 <__mulsf3+0x58> +800032f8: 0ff00913 li s2,255 +800032fc: 00200a13 li s4,2 +80003300: f60484e3 beqz s1,80003268 <__mulsf3+0x5c> +80003304: 00300a13 li s4,3 +80003308: f61ff06f j 80003268 <__mulsf3+0x5c> +8000330c: 00000913 li s2,0 +80003310: 00100a13 li s4,1 +80003314: f55ff06f j 80003268 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80003318: 02040a63 beqz s0,8000334c <__mulsf3+0x140> +8000331c: 00040513 mv a0,s0 +80003320: 5d4000ef jal ra,800038f4 <__clzsi2> +80003324: ffb50793 addi a5,a0,-5 +80003328: 00f41433 sll s0,s0,a5 +8000332c: f8a00793 li a5,-118 +80003330: 40a78533 sub a0,a5,a0 +80003334: f69ff06f j 8000329c <__mulsf3+0x90> +80003338: 0ff00513 li a0,255 +8000333c: 00200693 li a3,2 +80003340: f60400e3 beqz s0,800032a0 <__mulsf3+0x94> +80003344: 00300693 li a3,3 +80003348: f59ff06f j 800032a0 <__mulsf3+0x94> +8000334c: 00000513 li a0,0 +80003350: 00100693 li a3,1 +80003354: f4dff06f j 800032a0 <__mulsf3+0x94> +80003358: 000107b7 lui a5,0x10 +8000335c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +80003360: 0104d713 srli a4,s1,0x10 +80003364: 01045693 srli a3,s0,0x10 +80003368: 0064f4b3 and s1,s1,t1 +8000336c: 00647433 and s0,s0,t1 +80003370: 028488b3 mul a7,s1,s0 +80003374: 028705b3 mul a1,a4,s0 +80003378: 02d70433 mul s0,a4,a3 +8000337c: 029686b3 mul a3,a3,s1 +80003380: 0108d493 srli s1,a7,0x10 +80003384: 00b686b3 add a3,a3,a1 +80003388: 00d484b3 add s1,s1,a3 +8000338c: 00b4f463 bleu a1,s1,80003394 <__mulsf3+0x188> +80003390: 00f40433 add s0,s0,a5 +80003394: 0064f7b3 and a5,s1,t1 +80003398: 01079793 slli a5,a5,0x10 +8000339c: 0068f8b3 and a7,a7,t1 +800033a0: 011787b3 add a5,a5,a7 +800033a4: 00679713 slli a4,a5,0x6 +800033a8: 0104d493 srli s1,s1,0x10 +800033ac: 00e03733 snez a4,a4 +800033b0: 01a7d793 srli a5,a5,0x1a +800033b4: 00848433 add s0,s1,s0 +800033b8: 00f767b3 or a5,a4,a5 +800033bc: 00641413 slli s0,s0,0x6 +800033c0: 00f46433 or s0,s0,a5 +800033c4: 00441793 slli a5,s0,0x4 +800033c8: 0c07de63 bgez a5,800034a4 <__mulsf3+0x298> +800033cc: 00145793 srli a5,s0,0x1 +800033d0: 00147413 andi s0,s0,1 +800033d4: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +800033d8: 07f80713 addi a4,a6,127 +800033dc: 0ce05863 blez a4,800034ac <__mulsf3+0x2a0> +800033e0: 00747793 andi a5,s0,7 +800033e4: 00078a63 beqz a5,800033f8 <__mulsf3+0x1ec> +800033e8: 00f47793 andi a5,s0,15 +800033ec: 00400693 li a3,4 +800033f0: 00d78463 beq a5,a3,800033f8 <__mulsf3+0x1ec> +800033f4: 00440413 addi s0,s0,4 +800033f8: 00441793 slli a5,s0,0x4 +800033fc: 0007da63 bgez a5,80003410 <__mulsf3+0x204> +80003400: f80007b7 lui a5,0xf8000 +80003404: fff78793 addi a5,a5,-1 # f7ffffff +80003408: 00f47433 and s0,s0,a5 +8000340c: 08080713 addi a4,a6,128 +80003410: 0fe00793 li a5,254 +80003414: 0ee7cc63 blt a5,a4,8000350c <__mulsf3+0x300> +80003418: 00345793 srli a5,s0,0x3 +8000341c: 0300006f j 8000344c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80003420: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80003424: 00048413 mv s0,s1 +80003428: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000342c: 00200793 li a5,2 +80003430: 0cf68e63 beq a3,a5,8000350c <__mulsf3+0x300> +80003434: 00300793 li a5,3 +80003438: 0cf68263 beq a3,a5,800034fc <__mulsf3+0x2f0> +8000343c: 00100593 li a1,1 +80003440: 00000793 li a5,0 +80003444: 00000713 li a4,0 +80003448: f8b698e3 bne a3,a1,800033d8 <__mulsf3+0x1cc> +8000344c: 00800437 lui s0,0x800 +80003450: fff40413 addi s0,s0,-1 # 7fffff +80003454: 80800537 lui a0,0x80800 +80003458: 0087f7b3 and a5,a5,s0 +8000345c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +80003460: 01c12083 lw ra,28(sp) +80003464: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +80003468: 0ff77713 andi a4,a4,255 +8000346c: 00a7f7b3 and a5,a5,a0 +80003470: 01771713 slli a4,a4,0x17 +80003474: 01f61513 slli a0,a2,0x1f +80003478: 00e7e7b3 or a5,a5,a4 +} +8000347c: 01412483 lw s1,20(sp) +80003480: 01012903 lw s2,16(sp) +80003484: 00c12983 lw s3,12(sp) +80003488: 00812a03 lw s4,8(sp) +8000348c: 00412a83 lw s5,4(sp) +80003490: 00a7e533 or a0,a5,a0 +80003494: 02010113 addi sp,sp,32 +80003498: 00008067 ret + FP_UNPACK_S (B, b); +8000349c: 000a8613 mv a2,s5 +800034a0: f8dff06f j 8000342c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800034a4: 00050813 mv a6,a0 +800034a8: f31ff06f j 800033d8 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800034ac: 00100793 li a5,1 +800034b0: 40e787b3 sub a5,a5,a4 +800034b4: 01b00713 li a4,27 +800034b8: 06f74063 blt a4,a5,80003518 <__mulsf3+0x30c> +800034bc: 09e80813 addi a6,a6,158 +800034c0: 00f457b3 srl a5,s0,a5 +800034c4: 01041433 sll s0,s0,a6 +800034c8: 00803433 snez s0,s0 +800034cc: 0087e433 or s0,a5,s0 +800034d0: 00747793 andi a5,s0,7 +800034d4: 00078a63 beqz a5,800034e8 <__mulsf3+0x2dc> +800034d8: 00f47793 andi a5,s0,15 +800034dc: 00400713 li a4,4 +800034e0: 00e78463 beq a5,a4,800034e8 <__mulsf3+0x2dc> +800034e4: 00440413 addi s0,s0,4 +800034e8: 00541793 slli a5,s0,0x5 +800034ec: 0207ca63 bltz a5,80003520 <__mulsf3+0x314> +800034f0: 00345793 srli a5,s0,0x3 +800034f4: 00000713 li a4,0 +800034f8: f55ff06f j 8000344c <__mulsf3+0x240> +800034fc: 004007b7 lui a5,0x400 +80003500: 0ff00713 li a4,255 +80003504: 00000613 li a2,0 +80003508: f45ff06f j 8000344c <__mulsf3+0x240> +8000350c: 00000793 li a5,0 +80003510: 0ff00713 li a4,255 +80003514: f39ff06f j 8000344c <__mulsf3+0x240> +80003518: 00000793 li a5,0 +8000351c: fd9ff06f j 800034f4 <__mulsf3+0x2e8> +80003520: 00000793 li a5,0 +80003524: 00100713 li a4,1 +80003528: f25ff06f j 8000344c <__mulsf3+0x240> + +8000352c <__floatsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatsisf (SItype i) +{ +8000352c: ff010113 addi sp,sp,-16 +80003530: 00112623 sw ra,12(sp) +80003534: 00812423 sw s0,8(sp) +80003538: 00912223 sw s1,4(sp) + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +8000353c: 10050263 beqz a0,80003640 <__floatsisf+0x114> +80003540: 00050413 mv s0,a0 +80003544: 01f55493 srli s1,a0,0x1f +80003548: 00055463 bgez a0,80003550 <__floatsisf+0x24> +8000354c: 40a00433 neg s0,a0 +80003550: 00040513 mv a0,s0 +80003554: 3a0000ef jal ra,800038f4 <__clzsi2> +80003558: 09e00793 li a5,158 +8000355c: 40a787b3 sub a5,a5,a0 +80003560: 09600713 li a4,150 +80003564: 06f74063 blt a4,a5,800035c4 <__floatsisf+0x98> +80003568: 00800713 li a4,8 +8000356c: 00a75663 ble a0,a4,80003578 <__floatsisf+0x4c> +80003570: ff850513 addi a0,a0,-8 +80003574: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80003578: 00800537 lui a0,0x800 +8000357c: fff50513 addi a0,a0,-1 # 7fffff +80003580: 0ff7f793 andi a5,a5,255 +80003584: 00a47433 and s0,s0,a0 +80003588: 01779513 slli a0,a5,0x17 +8000358c: 808007b7 lui a5,0x80800 +80003590: fff78793 addi a5,a5,-1 # 807fffff +80003594: 00f47433 and s0,s0,a5 +80003598: 800007b7 lui a5,0x80000 +8000359c: 00a46433 or s0,s0,a0 +800035a0: fff7c793 not a5,a5 +800035a4: 01f49513 slli a0,s1,0x1f +800035a8: 00f47433 and s0,s0,a5 + FP_HANDLE_EXCEPTIONS; + + return a; +} +800035ac: 00a46533 or a0,s0,a0 +800035b0: 00c12083 lw ra,12(sp) +800035b4: 00812403 lw s0,8(sp) +800035b8: 00412483 lw s1,4(sp) +800035bc: 01010113 addi sp,sp,16 +800035c0: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +800035c4: 09900713 li a4,153 +800035c8: 02f75063 ble a5,a4,800035e8 <__floatsisf+0xbc> +800035cc: 00500713 li a4,5 +800035d0: 40a70733 sub a4,a4,a0 +800035d4: 01b50693 addi a3,a0,27 +800035d8: 00e45733 srl a4,s0,a4 +800035dc: 00d41433 sll s0,s0,a3 +800035e0: 00803433 snez s0,s0 +800035e4: 00876433 or s0,a4,s0 +800035e8: 00500713 li a4,5 +800035ec: 00a75663 ble a0,a4,800035f8 <__floatsisf+0xcc> +800035f0: ffb50713 addi a4,a0,-5 +800035f4: 00e41433 sll s0,s0,a4 +800035f8: fc000737 lui a4,0xfc000 +800035fc: fff70713 addi a4,a4,-1 # fbffffff +80003600: 00747693 andi a3,s0,7 +80003604: 00e47733 and a4,s0,a4 +80003608: 00068a63 beqz a3,8000361c <__floatsisf+0xf0> +8000360c: 00f47413 andi s0,s0,15 +80003610: 00400693 li a3,4 +80003614: 00d40463 beq s0,a3,8000361c <__floatsisf+0xf0> +80003618: 00470713 addi a4,a4,4 +8000361c: 00571693 slli a3,a4,0x5 +80003620: 0006dc63 bgez a3,80003638 <__floatsisf+0x10c> +80003624: fc0007b7 lui a5,0xfc000 +80003628: fff78793 addi a5,a5,-1 # fbffffff +8000362c: 00f77733 and a4,a4,a5 +80003630: 09f00793 li a5,159 +80003634: 40a787b3 sub a5,a5,a0 +80003638: 00375413 srli s0,a4,0x3 +8000363c: f3dff06f j 80003578 <__floatsisf+0x4c> +80003640: 00000413 li s0,0 +80003644: 00000793 li a5,0 +80003648: 00000493 li s1,0 +8000364c: f2dff06f j 80003578 <__floatsisf+0x4c> + +80003650 <__extendsfdf2>: +#include "single.h" +#include "double.h" + +DFtype +__extendsfdf2 (SFtype a) +{ +80003650: 01755793 srli a5,a0,0x17 +80003654: ff010113 addi sp,sp,-16 +80003658: 0ff7f793 andi a5,a5,255 +8000365c: 00812423 sw s0,8(sp) + DFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_EXTEND (D, S, 2, 1, R, A); +80003660: 00178713 addi a4,a5,1 + FP_UNPACK_RAW_S (A, a); +80003664: 00800437 lui s0,0x800 +{ +80003668: 00912223 sw s1,4(sp) + FP_UNPACK_RAW_S (A, a); +8000366c: fff40413 addi s0,s0,-1 # 7fffff +{ +80003670: 00112623 sw ra,12(sp) + FP_EXTEND (D, S, 2, 1, R, A); +80003674: 0ff77713 andi a4,a4,255 +80003678: 00100693 li a3,1 + FP_UNPACK_RAW_S (A, a); +8000367c: 00a47433 and s0,s0,a0 +80003680: 01f55493 srli s1,a0,0x1f + FP_EXTEND (D, S, 2, 1, R, A); +80003684: 06e6d263 ble a4,a3,800036e8 <__extendsfdf2+0x98> +80003688: 38078513 addi a0,a5,896 +8000368c: 00345793 srli a5,s0,0x3 +80003690: 01d41413 slli s0,s0,0x1d +#else + FP_EXTEND (D, S, 1, 1, R, A); +#endif + FP_PACK_RAW_D (r, R); +80003694: 00100737 lui a4,0x100 +80003698: fff70713 addi a4,a4,-1 # fffff +8000369c: 00e7f7b3 and a5,a5,a4 +800036a0: 80100737 lui a4,0x80100 +800036a4: fff70713 addi a4,a4,-1 # 800fffff +800036a8: 7ff57513 andi a0,a0,2047 +800036ac: 01451513 slli a0,a0,0x14 +800036b0: 00e7f7b3 and a5,a5,a4 +800036b4: 80000737 lui a4,0x80000 +800036b8: 00a7e7b3 or a5,a5,a0 +800036bc: fff74713 not a4,a4 +800036c0: 01f49513 slli a0,s1,0x1f +800036c4: 00e7f7b3 and a5,a5,a4 +800036c8: 00a7e733 or a4,a5,a0 + FP_HANDLE_EXCEPTIONS; + + return r; +} +800036cc: 00c12083 lw ra,12(sp) +800036d0: 00040513 mv a0,s0 +800036d4: 00812403 lw s0,8(sp) +800036d8: 00412483 lw s1,4(sp) +800036dc: 00070593 mv a1,a4 +800036e0: 01010113 addi sp,sp,16 +800036e4: 00008067 ret + FP_EXTEND (D, S, 2, 1, R, A); +800036e8: 04079463 bnez a5,80003730 <__extendsfdf2+0xe0> +800036ec: 06040263 beqz s0,80003750 <__extendsfdf2+0x100> +800036f0: 00040513 mv a0,s0 +800036f4: 200000ef jal ra,800038f4 <__clzsi2> +800036f8: 00a00793 li a5,10 +800036fc: 02a7c263 blt a5,a0,80003720 <__extendsfdf2+0xd0> +80003700: 00b00793 li a5,11 +80003704: 40a787b3 sub a5,a5,a0 +80003708: 01550713 addi a4,a0,21 +8000370c: 00f457b3 srl a5,s0,a5 +80003710: 00e41433 sll s0,s0,a4 +80003714: 38900713 li a4,905 +80003718: 40a70533 sub a0,a4,a0 +8000371c: f79ff06f j 80003694 <__extendsfdf2+0x44> +80003720: ff550793 addi a5,a0,-11 +80003724: 00f417b3 sll a5,s0,a5 +80003728: 00000413 li s0,0 +8000372c: fe9ff06f j 80003714 <__extendsfdf2+0xc4> +80003730: 00000793 li a5,0 +80003734: 00040a63 beqz s0,80003748 <__extendsfdf2+0xf8> +80003738: 00345793 srli a5,s0,0x3 +8000373c: 00080737 lui a4,0x80 +80003740: 01d41413 slli s0,s0,0x1d +80003744: 00e7e7b3 or a5,a5,a4 +80003748: 7ff00513 li a0,2047 +8000374c: f49ff06f j 80003694 <__extendsfdf2+0x44> +80003750: 00000793 li a5,0 +80003754: 00000513 li a0,0 +80003758: f3dff06f j 80003694 <__extendsfdf2+0x44> + +8000375c <__truncdfsf2>: + FP_DECL_D (A); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); +8000375c: 00100637 lui a2,0x100 +80003760: fff60613 addi a2,a2,-1 # fffff +80003764: 00b67633 and a2,a2,a1 +80003768: 0145d813 srli a6,a1,0x14 +8000376c: 01d55793 srli a5,a0,0x1d +80003770: 7ff87813 andi a6,a6,2047 +80003774: 00361613 slli a2,a2,0x3 +80003778: 00c7e633 or a2,a5,a2 +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_TRUNC (S, D, 1, 2, R, A); +8000377c: 00180793 addi a5,a6,1 +80003780: 7ff7f793 andi a5,a5,2047 +80003784: 00100693 li a3,1 + FP_UNPACK_SEMIRAW_D (A, a); +80003788: 01f5d593 srli a1,a1,0x1f +8000378c: 00351713 slli a4,a0,0x3 + FP_TRUNC (S, D, 1, 2, R, A); +80003790: 0af6d663 ble a5,a3,8000383c <__truncdfsf2+0xe0> +80003794: c8080693 addi a3,a6,-896 +80003798: 0fe00793 li a5,254 +8000379c: 0cd7c263 blt a5,a3,80003860 <__truncdfsf2+0x104> +800037a0: 08d04063 bgtz a3,80003820 <__truncdfsf2+0xc4> +800037a4: fe900793 li a5,-23 +800037a8: 12f6c463 blt a3,a5,800038d0 <__truncdfsf2+0x174> +800037ac: 008007b7 lui a5,0x800 +800037b0: 01e00513 li a0,30 +800037b4: 00f66633 or a2,a2,a5 +800037b8: 40d50533 sub a0,a0,a3 +800037bc: 01f00793 li a5,31 +800037c0: 02a7c863 blt a5,a0,800037f0 <__truncdfsf2+0x94> +800037c4: c8280813 addi a6,a6,-894 +800037c8: 010717b3 sll a5,a4,a6 +800037cc: 00f037b3 snez a5,a5 +800037d0: 01061633 sll a2,a2,a6 +800037d4: 00a75533 srl a0,a4,a0 +800037d8: 00c7e7b3 or a5,a5,a2 +800037dc: 00f567b3 or a5,a0,a5 +800037e0: 00000693 li a3,0 +#else + FP_TRUNC (S, D, 1, 1, R, A); +#endif + FP_PACK_SEMIRAW_S (r, R); +800037e4: 0077f713 andi a4,a5,7 +800037e8: 08070063 beqz a4,80003868 <__truncdfsf2+0x10c> +800037ec: 0ec0006f j 800038d8 <__truncdfsf2+0x17c> + FP_TRUNC (S, D, 1, 2, R, A); +800037f0: ffe00793 li a5,-2 +800037f4: 40d786b3 sub a3,a5,a3 +800037f8: 02000793 li a5,32 +800037fc: 00d656b3 srl a3,a2,a3 +80003800: 00000893 li a7,0 +80003804: 00f50663 beq a0,a5,80003810 <__truncdfsf2+0xb4> +80003808: ca280813 addi a6,a6,-862 +8000380c: 010618b3 sll a7,a2,a6 +80003810: 00e8e7b3 or a5,a7,a4 +80003814: 00f037b3 snez a5,a5 +80003818: 00f6e7b3 or a5,a3,a5 +8000381c: fc5ff06f j 800037e0 <__truncdfsf2+0x84> +80003820: 00651513 slli a0,a0,0x6 +80003824: 00a03533 snez a0,a0 +80003828: 00361613 slli a2,a2,0x3 +8000382c: 01d75793 srli a5,a4,0x1d +80003830: 00c56633 or a2,a0,a2 +80003834: 00f667b3 or a5,a2,a5 +80003838: fadff06f j 800037e4 <__truncdfsf2+0x88> +8000383c: 00e667b3 or a5,a2,a4 +80003840: 00081663 bnez a6,8000384c <__truncdfsf2+0xf0> +80003844: 00f037b3 snez a5,a5 +80003848: f99ff06f j 800037e0 <__truncdfsf2+0x84> +8000384c: 0ff00693 li a3,255 +80003850: 00078c63 beqz a5,80003868 <__truncdfsf2+0x10c> +80003854: 00361613 slli a2,a2,0x3 +80003858: 020007b7 lui a5,0x2000 +8000385c: fd9ff06f j 80003834 <__truncdfsf2+0xd8> +80003860: 00000793 li a5,0 +80003864: 0ff00693 li a3,255 + FP_PACK_SEMIRAW_S (r, R); +80003868: 00579713 slli a4,a5,0x5 +8000386c: 00075e63 bgez a4,80003888 <__truncdfsf2+0x12c> +80003870: 00168693 addi a3,a3,1 +80003874: 0ff00713 li a4,255 +80003878: 06e68a63 beq a3,a4,800038ec <__truncdfsf2+0x190> +8000387c: fc000737 lui a4,0xfc000 +80003880: fff70713 addi a4,a4,-1 # fbffffff +80003884: 00e7f7b3 and a5,a5,a4 +80003888: 0ff00713 li a4,255 +8000388c: 0037d793 srli a5,a5,0x3 +80003890: 00e69863 bne a3,a4,800038a0 <__truncdfsf2+0x144> +80003894: 00078663 beqz a5,800038a0 <__truncdfsf2+0x144> +80003898: 004007b7 lui a5,0x400 +8000389c: 00000593 li a1,0 +800038a0: 00800537 lui a0,0x800 +800038a4: fff50513 addi a0,a0,-1 # 7fffff +800038a8: 00a7f7b3 and a5,a5,a0 +800038ac: 80800537 lui a0,0x80800 +800038b0: fff50513 addi a0,a0,-1 # 807fffff +800038b4: 0ff6f693 andi a3,a3,255 +800038b8: 01769693 slli a3,a3,0x17 +800038bc: 00a7f7b3 and a5,a5,a0 +800038c0: 01f59593 slli a1,a1,0x1f +800038c4: 00d7e7b3 or a5,a5,a3 + FP_HANDLE_EXCEPTIONS; + + return r; +} +800038c8: 00b7e533 or a0,a5,a1 +800038cc: 00008067 ret + FP_TRUNC (S, D, 1, 2, R, A); +800038d0: 00100793 li a5,1 +800038d4: 00000693 li a3,0 + FP_PACK_SEMIRAW_S (r, R); +800038d8: 00f7f713 andi a4,a5,15 +800038dc: 00400613 li a2,4 +800038e0: f8c704e3 beq a4,a2,80003868 <__truncdfsf2+0x10c> +800038e4: 00478793 addi a5,a5,4 # 400004 +800038e8: f81ff06f j 80003868 <__truncdfsf2+0x10c> +800038ec: 00000793 li a5,0 +800038f0: f99ff06f j 80003888 <__truncdfsf2+0x12c> + +800038f4 <__clzsi2>: + count_leading_zeros (ret, x); +800038f4: 000107b7 lui a5,0x10 +800038f8: 02f57a63 bleu a5,a0,8000392c <__clzsi2+0x38> +800038fc: 0ff00793 li a5,255 +80003900: 00a7b7b3 sltu a5,a5,a0 +80003904: 00379793 slli a5,a5,0x3 +80003908: 02000713 li a4,32 +8000390c: 40f70733 sub a4,a4,a5 +80003910: 00f557b3 srl a5,a0,a5 +80003914: 80004537 lui a0,0x80004 +80003918: b7850513 addi a0,a0,-1160 # 80003b78 +8000391c: 00a787b3 add a5,a5,a0 +80003920: 0007c503 lbu a0,0(a5) # 10000 +} +80003924: 40a70533 sub a0,a4,a0 +80003928: 00008067 ret + count_leading_zeros (ret, x); +8000392c: 01000737 lui a4,0x1000 +80003930: 01000793 li a5,16 +80003934: fce56ae3 bltu a0,a4,80003908 <__clzsi2+0x14> +80003938: 01800793 li a5,24 +8000393c: fcdff06f j 80003908 <__clzsi2+0x14> + +80003940 : +80003940: 8181a783 lw a5,-2024(gp) # 80004138 <_impure_ptr> +80003944: 0aa7a423 sw a0,168(a5) +80003948: 0a07a623 sw zero,172(a5) +8000394c: 00008067 ret + +80003950 : +80003950: 8181a603 lw a2,-2024(gp) # 80004138 <_impure_ptr> +80003954: 4c9587b7 lui a5,0x4c958 +80003958: f2d78693 addi a3,a5,-211 # 4c957f2d +8000395c: 0ac62503 lw a0,172(a2) +80003960: 0a862783 lw a5,168(a2) +80003964: 5851f737 lui a4,0x5851f +80003968: 42d70713 addi a4,a4,1069 # 5851f42d +8000396c: 02e78733 mul a4,a5,a4 +80003970: 02d50533 mul a0,a0,a3 +80003974: 00e50533 add a0,a0,a4 +80003978: 02d78733 mul a4,a5,a3 +8000397c: 02d7b7b3 mulhu a5,a5,a3 +80003980: 00170693 addi a3,a4,1 +80003984: 0ad62423 sw a3,168(a2) +80003988: 00f50533 add a0,a0,a5 +8000398c: 00e6b7b3 sltu a5,a3,a4 +80003990: 00a787b3 add a5,a5,a0 +80003994: 80000537 lui a0,0x80000 +80003998: fff54513 not a0,a0 +8000399c: 0af62623 sw a5,172(a2) +800039a0: 00a7f533 and a0,a5,a0 +800039a4: 00008067 ret + +Disassembly of section .data: + +80003cf8 : +80003cf8: 0000 unimp +80003cfa: 0000 unimp +80003cfc: 3fe4 fld fs1,248(a5) +80003cfe: 8000 0x8000 +80003d00: 404c lw a1,4(s0) +80003d02: 8000 0x8000 +80003d04: 40b4 lw a3,64(s1) +80003d06: 8000 0x8000 +80003d08: 0000 unimp +80003d0a: 0000 unimp +80003d0c: 0000 unimp +80003d0e: 0000 unimp +80003d10: 0000 unimp +80003d12: 0000 unimp +80003d14: 0000 unimp +80003d16: 0000 unimp +80003d18: 0000 unimp +80003d1a: 0000 unimp +80003d1c: 0000 unimp +80003d1e: 0000 unimp +80003d20: 0000 unimp +80003d22: 0000 unimp +80003d24: 0000 unimp +80003d26: 0000 unimp +80003d28: 0000 unimp +80003d2a: 0000 unimp +80003d2c: 0000 unimp +80003d2e: 0000 unimp +80003d30: 0000 unimp +80003d32: 0000 unimp +80003d34: 0000 unimp +80003d36: 0000 unimp +80003d38: 0000 unimp +80003d3a: 0000 unimp +80003d3c: 0000 unimp +80003d3e: 0000 unimp +80003d40: 0000 unimp +80003d42: 0000 unimp +80003d44: 0000 unimp +80003d46: 0000 unimp +80003d48: 0000 unimp +80003d4a: 0000 unimp +80003d4c: 0000 unimp +80003d4e: 0000 unimp +80003d50: 0000 unimp +80003d52: 0000 unimp +80003d54: 0000 unimp +80003d56: 0000 unimp +80003d58: 0000 unimp +80003d5a: 0000 unimp +80003d5c: 0000 unimp +80003d5e: 0000 unimp +80003d60: 0000 unimp +80003d62: 0000 unimp +80003d64: 0000 unimp +80003d66: 0000 unimp +80003d68: 0000 unimp +80003d6a: 0000 unimp +80003d6c: 0000 unimp +80003d6e: 0000 unimp +80003d70: 0000 unimp +80003d72: 0000 unimp +80003d74: 0000 unimp +80003d76: 0000 unimp +80003d78: 0000 unimp +80003d7a: 0000 unimp +80003d7c: 0000 unimp +80003d7e: 0000 unimp +80003d80: 0000 unimp +80003d82: 0000 unimp +80003d84: 0000 unimp +80003d86: 0000 unimp +80003d88: 0000 unimp +80003d8a: 0000 unimp +80003d8c: 0000 unimp +80003d8e: 0000 unimp +80003d90: 0000 unimp +80003d92: 0000 unimp +80003d94: 0000 unimp +80003d96: 0000 unimp +80003d98: 0000 unimp +80003d9a: 0000 unimp +80003d9c: 0000 unimp +80003d9e: 0000 unimp +80003da0: 0001 nop +80003da2: 0000 unimp +80003da4: 0000 unimp +80003da6: 0000 unimp +80003da8: 330e fld ft6,224(sp) +80003daa: abcd j 8000439c <_tbss_end+0x1d8> +80003dac: 1234 addi a3,sp,296 +80003dae: e66d bnez a2,80003e98 +80003db0: deec sw a1,124(a3) +80003db2: 0005 c.nop 1 +80003db4: 0000000b 0xb +80003db8: 0000 unimp +80003dba: 0000 unimp +80003dbc: 0000 unimp +80003dbe: 0000 unimp +80003dc0: 0000 unimp +80003dc2: 0000 unimp +80003dc4: 0000 unimp +80003dc6: 0000 unimp +80003dc8: 0000 unimp +80003dca: 0000 unimp +80003dcc: 0000 unimp +80003dce: 0000 unimp +80003dd0: 0000 unimp +80003dd2: 0000 unimp +80003dd4: 0000 unimp +80003dd6: 0000 unimp +80003dd8: 0000 unimp +80003dda: 0000 unimp +80003ddc: 0000 unimp +80003dde: 0000 unimp +80003de0: 0000 unimp +80003de2: 0000 unimp +80003de4: 0000 unimp +80003de6: 0000 unimp +80003de8: 0000 unimp +80003dea: 0000 unimp +80003dec: 0000 unimp +80003dee: 0000 unimp +80003df0: 0000 unimp +80003df2: 0000 unimp +80003df4: 0000 unimp +80003df6: 0000 unimp +80003df8: 0000 unimp +80003dfa: 0000 unimp +80003dfc: 0000 unimp +80003dfe: 0000 unimp +80003e00: 0000 unimp +80003e02: 0000 unimp +80003e04: 0000 unimp +80003e06: 0000 unimp +80003e08: 0000 unimp +80003e0a: 0000 unimp +80003e0c: 0000 unimp +80003e0e: 0000 unimp +80003e10: 0000 unimp +80003e12: 0000 unimp +80003e14: 0000 unimp +80003e16: 0000 unimp +80003e18: 0000 unimp +80003e1a: 0000 unimp +80003e1c: 0000 unimp +80003e1e: 0000 unimp +80003e20: 0000 unimp +80003e22: 0000 unimp +80003e24: 0000 unimp +80003e26: 0000 unimp +80003e28: 0000 unimp +80003e2a: 0000 unimp +80003e2c: 0000 unimp +80003e2e: 0000 unimp +80003e30: 0000 unimp +80003e32: 0000 unimp +80003e34: 0000 unimp +80003e36: 0000 unimp +80003e38: 0000 unimp +80003e3a: 0000 unimp +80003e3c: 0000 unimp +80003e3e: 0000 unimp +80003e40: 0000 unimp +80003e42: 0000 unimp +80003e44: 0000 unimp +80003e46: 0000 unimp +80003e48: 0000 unimp +80003e4a: 0000 unimp +80003e4c: 0000 unimp +80003e4e: 0000 unimp +80003e50: 0000 unimp +80003e52: 0000 unimp +80003e54: 0000 unimp +80003e56: 0000 unimp +80003e58: 0000 unimp +80003e5a: 0000 unimp +80003e5c: 0000 unimp +80003e5e: 0000 unimp +80003e60: 0000 unimp +80003e62: 0000 unimp +80003e64: 0000 unimp +80003e66: 0000 unimp +80003e68: 0000 unimp +80003e6a: 0000 unimp +80003e6c: 0000 unimp +80003e6e: 0000 unimp +80003e70: 0000 unimp +80003e72: 0000 unimp +80003e74: 0000 unimp +80003e76: 0000 unimp +80003e78: 0000 unimp +80003e7a: 0000 unimp +80003e7c: 0000 unimp +80003e7e: 0000 unimp +80003e80: 0000 unimp +80003e82: 0000 unimp +80003e84: 0000 unimp +80003e86: 0000 unimp +80003e88: 0000 unimp +80003e8a: 0000 unimp +80003e8c: 0000 unimp +80003e8e: 0000 unimp +80003e90: 0000 unimp +80003e92: 0000 unimp +80003e94: 0000 unimp +80003e96: 0000 unimp +80003e98: 0000 unimp +80003e9a: 0000 unimp +80003e9c: 0000 unimp +80003e9e: 0000 unimp +80003ea0: 0000 unimp +80003ea2: 0000 unimp +80003ea4: 0000 unimp +80003ea6: 0000 unimp +80003ea8: 0000 unimp +80003eaa: 0000 unimp +80003eac: 0000 unimp +80003eae: 0000 unimp +80003eb0: 0000 unimp +80003eb2: 0000 unimp +80003eb4: 0000 unimp +80003eb6: 0000 unimp +80003eb8: 0000 unimp +80003eba: 0000 unimp +80003ebc: 0000 unimp +80003ebe: 0000 unimp +80003ec0: 0000 unimp +80003ec2: 0000 unimp +80003ec4: 0000 unimp +80003ec6: 0000 unimp +80003ec8: 0000 unimp +80003eca: 0000 unimp +80003ecc: 0000 unimp +80003ece: 0000 unimp +80003ed0: 0000 unimp +80003ed2: 0000 unimp +80003ed4: 0000 unimp +80003ed6: 0000 unimp +80003ed8: 0000 unimp +80003eda: 0000 unimp +80003edc: 0000 unimp +80003ede: 0000 unimp +80003ee0: 0000 unimp +80003ee2: 0000 unimp +80003ee4: 0000 unimp +80003ee6: 0000 unimp +80003ee8: 0000 unimp +80003eea: 0000 unimp +80003eec: 0000 unimp +80003eee: 0000 unimp +80003ef0: 0000 unimp +80003ef2: 0000 unimp +80003ef4: 0000 unimp +80003ef6: 0000 unimp +80003ef8: 0000 unimp +80003efa: 0000 unimp +80003efc: 0000 unimp +80003efe: 0000 unimp +80003f00: 0000 unimp +80003f02: 0000 unimp +80003f04: 0000 unimp +80003f06: 0000 unimp +80003f08: 0000 unimp +80003f0a: 0000 unimp +80003f0c: 0000 unimp +80003f0e: 0000 unimp +80003f10: 0000 unimp +80003f12: 0000 unimp +80003f14: 0000 unimp +80003f16: 0000 unimp +80003f18: 0000 unimp +80003f1a: 0000 unimp +80003f1c: 0000 unimp +80003f1e: 0000 unimp +80003f20: 0000 unimp +80003f22: 0000 unimp +80003f24: 0000 unimp +80003f26: 0000 unimp +80003f28: 0000 unimp +80003f2a: 0000 unimp +80003f2c: 0000 unimp +80003f2e: 0000 unimp +80003f30: 0000 unimp +80003f32: 0000 unimp +80003f34: 0000 unimp +80003f36: 0000 unimp +80003f38: 0000 unimp +80003f3a: 0000 unimp +80003f3c: 0000 unimp +80003f3e: 0000 unimp +80003f40: 0000 unimp +80003f42: 0000 unimp +80003f44: 0000 unimp +80003f46: 0000 unimp +80003f48: 0000 unimp +80003f4a: 0000 unimp +80003f4c: 0000 unimp +80003f4e: 0000 unimp +80003f50: 0000 unimp +80003f52: 0000 unimp +80003f54: 0000 unimp +80003f56: 0000 unimp +80003f58: 0000 unimp +80003f5a: 0000 unimp +80003f5c: 0000 unimp +80003f5e: 0000 unimp +80003f60: 0000 unimp +80003f62: 0000 unimp +80003f64: 0000 unimp +80003f66: 0000 unimp +80003f68: 0000 unimp +80003f6a: 0000 unimp +80003f6c: 0000 unimp +80003f6e: 0000 unimp +80003f70: 0000 unimp +80003f72: 0000 unimp +80003f74: 0000 unimp +80003f76: 0000 unimp +80003f78: 0000 unimp +80003f7a: 0000 unimp +80003f7c: 0000 unimp +80003f7e: 0000 unimp +80003f80: 0000 unimp +80003f82: 0000 unimp +80003f84: 0000 unimp +80003f86: 0000 unimp +80003f88: 0000 unimp +80003f8a: 0000 unimp +80003f8c: 0000 unimp +80003f8e: 0000 unimp +80003f90: 0000 unimp +80003f92: 0000 unimp +80003f94: 0000 unimp +80003f96: 0000 unimp +80003f98: 0000 unimp +80003f9a: 0000 unimp +80003f9c: 0000 unimp +80003f9e: 0000 unimp +80003fa0: 0000 unimp +80003fa2: 0000 unimp +80003fa4: 0000 unimp +80003fa6: 0000 unimp +80003fa8: 0000 unimp +80003faa: 0000 unimp +80003fac: 0000 unimp +80003fae: 0000 unimp +80003fb0: 0000 unimp +80003fb2: 0000 unimp +80003fb4: 0000 unimp +80003fb6: 0000 unimp +80003fb8: 0000 unimp +80003fba: 0000 unimp +80003fbc: 0000 unimp +80003fbe: 0000 unimp +80003fc0: 0000 unimp +80003fc2: 0000 unimp +80003fc4: 0000 unimp +80003fc6: 0000 unimp +80003fc8: 0000 unimp +80003fca: 0000 unimp +80003fcc: 0000 unimp +80003fce: 0000 unimp +80003fd0: 0000 unimp +80003fd2: 0000 unimp +80003fd4: 0000 unimp +80003fd6: 0000 unimp +80003fd8: 0000 unimp +80003fda: 0000 unimp +80003fdc: 0000 unimp +80003fde: 0000 unimp +80003fe0: 0000 unimp +80003fe2: 0000 unimp +80003fe4: 0000 unimp +80003fe6: 0000 unimp +80003fe8: 0000 unimp +80003fea: 0000 unimp +80003fec: 0000 unimp +80003fee: 0000 unimp +80003ff0: 0000 unimp +80003ff2: 0000 unimp +80003ff4: 0000 unimp +80003ff6: 0000 unimp +80003ff8: 0000 unimp +80003ffa: 0000 unimp +80003ffc: 0000 unimp +80003ffe: 0000 unimp +80004000: 0000 unimp +80004002: 0000 unimp +80004004: 0000 unimp +80004006: 0000 unimp +80004008: 0000 unimp +8000400a: 0000 unimp +8000400c: 0000 unimp +8000400e: 0000 unimp +80004010: 0000 unimp +80004012: 0000 unimp +80004014: 0000 unimp +80004016: 0000 unimp +80004018: 0000 unimp +8000401a: 0000 unimp +8000401c: 0000 unimp +8000401e: 0000 unimp +80004020: 0000 unimp +80004022: 0000 unimp +80004024: 0000 unimp +80004026: 0000 unimp +80004028: 0000 unimp +8000402a: 0000 unimp +8000402c: 0000 unimp +8000402e: 0000 unimp +80004030: 0000 unimp +80004032: 0000 unimp +80004034: 0000 unimp +80004036: 0000 unimp +80004038: 0000 unimp +8000403a: 0000 unimp +8000403c: 0000 unimp +8000403e: 0000 unimp +80004040: 0000 unimp +80004042: 0000 unimp +80004044: 0000 unimp +80004046: 0000 unimp +80004048: 0000 unimp +8000404a: 0000 unimp +8000404c: 0000 unimp +8000404e: 0000 unimp +80004050: 0000 unimp +80004052: 0000 unimp +80004054: 0000 unimp +80004056: 0000 unimp +80004058: 0000 unimp +8000405a: 0000 unimp +8000405c: 0000 unimp +8000405e: 0000 unimp +80004060: 0000 unimp +80004062: 0000 unimp +80004064: 0000 unimp +80004066: 0000 unimp +80004068: 0000 unimp +8000406a: 0000 unimp +8000406c: 0000 unimp +8000406e: 0000 unimp +80004070: 0000 unimp +80004072: 0000 unimp +80004074: 0000 unimp +80004076: 0000 unimp +80004078: 0000 unimp +8000407a: 0000 unimp +8000407c: 0000 unimp +8000407e: 0000 unimp +80004080: 0000 unimp +80004082: 0000 unimp +80004084: 0000 unimp +80004086: 0000 unimp +80004088: 0000 unimp +8000408a: 0000 unimp +8000408c: 0000 unimp +8000408e: 0000 unimp +80004090: 0000 unimp +80004092: 0000 unimp +80004094: 0000 unimp +80004096: 0000 unimp +80004098: 0000 unimp +8000409a: 0000 unimp +8000409c: 0000 unimp +8000409e: 0000 unimp +800040a0: 0000 unimp +800040a2: 0000 unimp +800040a4: 0000 unimp +800040a6: 0000 unimp +800040a8: 0000 unimp +800040aa: 0000 unimp +800040ac: 0000 unimp +800040ae: 0000 unimp +800040b0: 0000 unimp +800040b2: 0000 unimp +800040b4: 0000 unimp +800040b6: 0000 unimp +800040b8: 0000 unimp +800040ba: 0000 unimp +800040bc: 0000 unimp +800040be: 0000 unimp +800040c0: 0000 unimp +800040c2: 0000 unimp +800040c4: 0000 unimp +800040c6: 0000 unimp +800040c8: 0000 unimp +800040ca: 0000 unimp +800040cc: 0000 unimp +800040ce: 0000 unimp +800040d0: 0000 unimp +800040d2: 0000 unimp +800040d4: 0000 unimp +800040d6: 0000 unimp +800040d8: 0000 unimp +800040da: 0000 unimp +800040dc: 0000 unimp +800040de: 0000 unimp +800040e0: 0000 unimp +800040e2: 0000 unimp +800040e4: 0000 unimp +800040e6: 0000 unimp +800040e8: 0000 unimp +800040ea: 0000 unimp +800040ec: 0000 unimp +800040ee: 0000 unimp +800040f0: 0000 unimp +800040f2: 0000 unimp +800040f4: 0000 unimp +800040f6: 0000 unimp +800040f8: 0000 unimp +800040fa: 0000 unimp +800040fc: 0000 unimp +800040fe: 0000 unimp +80004100: 0000 unimp +80004102: 0000 unimp +80004104: 0000 unimp +80004106: 0000 unimp +80004108: 0000 unimp +8000410a: 0000 unimp +8000410c: 0000 unimp +8000410e: 0000 unimp +80004110: 0000 unimp +80004112: 0000 unimp +80004114: 0000 unimp +80004116: 0000 unimp +80004118: 0000 unimp +8000411a: 0000 unimp +8000411c: 0000 unimp +8000411e: 0000 unimp diff --git a/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.riscv b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.riscv new file mode 100755 index 0000000..a7fa625 Binary files /dev/null and b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.riscv differ diff --git a/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.sid_0.pkl b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.sid_0.pkl new file mode 100644 index 0000000..482c0e3 Binary files /dev/null and b/analyzer/expdir/ctest/noise/Scratchpad512KBRV32Config/noise.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_0.pkl new file mode 100644 index 0000000..e79da4c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_2.pkl new file mode 100644 index 0000000..4ae50de Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_4.pkl new file mode 100644 index 0000000..928585c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/0/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_0.pkl new file mode 100644 index 0000000..161a82a Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_2.pkl new file mode 100644 index 0000000..3143dc2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_4.pkl new file mode 100644 index 0000000..eb6ec2d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/1/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_0.pkl new file mode 100644 index 0000000..f8365af Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_2.pkl new file mode 100644 index 0000000..40cf012 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_4.pkl new file mode 100644 index 0000000..97712ce Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/2/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_0.pkl new file mode 100644 index 0000000..bba7ee0 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_2.pkl new file mode 100644 index 0000000..cfb2b02 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_3.pkl new file mode 100644 index 0000000..e1541ee Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_4.pkl new file mode 100644 index 0000000..c73f750 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/3/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_0.pkl new file mode 100644 index 0000000..944d629 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_2.pkl new file mode 100644 index 0000000..f0e4edc Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_4.pkl new file mode 100644 index 0000000..5402326 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/4/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_0.pkl new file mode 100644 index 0000000..4852c6a Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_2.pkl new file mode 100644 index 0000000..fd70bb2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_4.pkl new file mode 100644 index 0000000..28e1bb0 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/5/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_0.pkl new file mode 100644 index 0000000..944d629 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_2.pkl new file mode 100644 index 0000000..06e2766 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_4.pkl new file mode 100644 index 0000000..10e5a11 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/6/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.riscv new file mode 100755 index 0000000..1105170 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_0.pkl new file mode 100644 index 0000000..bbb68e3 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_2.pkl new file mode 100644 index 0000000..40cf012 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_4.pkl new file mode 100644 index 0000000..e51faa5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultBufferlessRV32Config/12800s/7/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_0.pkl new file mode 100644 index 0000000..851a2af Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_2.pkl new file mode 100644 index 0000000..6be228d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_4.pkl new file mode 100644 index 0000000..28d3a64 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/0/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_0.pkl new file mode 100644 index 0000000..718c42a Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_2.pkl new file mode 100644 index 0000000..3143dc2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_3.pkl new file mode 100644 index 0000000..e1541ee Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_4.pkl new file mode 100644 index 0000000..69e60b0 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/1/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_0.pkl new file mode 100644 index 0000000..371884c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_2.pkl new file mode 100644 index 0000000..99456c5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_4.pkl new file mode 100644 index 0000000..49492fd Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/2/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_0.pkl new file mode 100644 index 0000000..9717623 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_2.pkl new file mode 100644 index 0000000..3143dc2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_4.pkl new file mode 100644 index 0000000..41894c4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/3/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_0.pkl new file mode 100644 index 0000000..fda8575 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_2.pkl new file mode 100644 index 0000000..3143dc2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_4.pkl new file mode 100644 index 0000000..744df16 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/4/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_0.pkl new file mode 100644 index 0000000..4c00028 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_2.pkl new file mode 100644 index 0000000..027bd5f Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_4.pkl new file mode 100644 index 0000000..d3fd909 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/5/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_0.pkl new file mode 100644 index 0000000..2feb3f4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_2.pkl new file mode 100644 index 0000000..b37464e Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_4.pkl new file mode 100644 index 0000000..830b2dc Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_5.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_6.pkl new file mode 100644 index 0000000..be4d1bf Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/6/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.riscv new file mode 100755 index 0000000..b0bf789 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_0.pkl new file mode 100644 index 0000000..af85487 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_2.pkl new file mode 100644 index 0000000..99456c5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_4.pkl new file mode 100644 index 0000000..7de2505 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_5.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_6.pkl new file mode 100644 index 0000000..907afd5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/12800s/7/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_0.pkl new file mode 100644 index 0000000..06efa9d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_4.pkl new file mode 100644 index 0000000..a59d242 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/0/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_0.pkl new file mode 100644 index 0000000..7f83f33 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_4.pkl new file mode 100644 index 0000000..79a0eec Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/1/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_0.pkl new file mode 100644 index 0000000..ebc1945 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_4.pkl new file mode 100644 index 0000000..39b430c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/10/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_0.pkl new file mode 100644 index 0000000..334fcd4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_4.pkl new file mode 100644 index 0000000..2a811f2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/11/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_0.pkl new file mode 100644 index 0000000..1ed077e Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_4.pkl new file mode 100644 index 0000000..b45e87d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/12/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_0.pkl new file mode 100644 index 0000000..944d629 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_4.pkl new file mode 100644 index 0000000..b45e87d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/13/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_0.pkl new file mode 100644 index 0000000..002d6de Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_4.pkl new file mode 100644 index 0000000..3a0fe7e Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/14/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_0.pkl new file mode 100644 index 0000000..0117bb9 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_4.pkl new file mode 100644 index 0000000..39b430c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/15/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_0.pkl new file mode 100644 index 0000000..af6250a Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_4.pkl new file mode 100644 index 0000000..39443dc Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/2/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_0.pkl new file mode 100644 index 0000000..dc86e16 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_4.pkl new file mode 100644 index 0000000..e521520 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/3/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_0.pkl new file mode 100644 index 0000000..6e2f3ab Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_4.pkl new file mode 100644 index 0000000..39b430c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/4/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_0.pkl new file mode 100644 index 0000000..cfa6e11 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_3.pkl new file mode 100644 index 0000000..f5868e4 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_4.pkl new file mode 100644 index 0000000..04154e1 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/5/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_0.pkl new file mode 100644 index 0000000..06efa9d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_4.pkl new file mode 100644 index 0000000..a59d242 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/6/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_0.pkl new file mode 100644 index 0000000..1efdb4e Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_4.pkl new file mode 100644 index 0000000..36ea7cd Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/7/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_0.pkl new file mode 100644 index 0000000..6e2f3ab Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_2.pkl new file mode 100644 index 0000000..de758a7 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_4.pkl new file mode 100644 index 0000000..39b430c Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/8/demo_robot.sid_6.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.dump.annot b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.dump.annot new file mode 100644 index 0000000..2ba296b --- /dev/null +++ b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.dump.annot @@ -0,0 +1,11392 @@ + +demo_robot.riscv: file format elf32-littleriscv + + +Disassembly of section .text.init: + +80000000 <_start>: +#endif + + .section ".text.init" + .globl _start +_start: + li x1, 0 +80000000: 00000093 li ra,0 + li x2, 0 +80000004: 00000113 li sp,0 + li x3, 0 +80000008: 00000193 li gp,0 + li x4, 0 +8000000c: 00000213 li tp,0 + li x5, 0 +80000010: 00000293 li t0,0 + li x6, 0 +80000014: 00000313 li t1,0 + li x7, 0 +80000018: 00000393 li t2,0 + li x8, 0 +8000001c: 00000413 li s0,0 + li x9, 0 +80000020: 00000493 li s1,0 + li x10,0 +80000024: 00000513 li a0,0 + li x11,0 +80000028: 00000593 li a1,0 + li x12,0 +8000002c: 00000613 li a2,0 + li x13,0 +80000030: 00000693 li a3,0 + li x14,0 +80000034: 00000713 li a4,0 + li x15,0 +80000038: 00000793 li a5,0 + li x16,0 +8000003c: 00000813 li a6,0 + li x17,0 +80000040: 00000893 li a7,0 + li x18,0 +80000044: 00000913 li s2,0 + li x19,0 +80000048: 00000993 li s3,0 + li x20,0 +8000004c: 00000a13 li s4,0 + li x21,0 +80000050: 00000a93 li s5,0 + li x22,0 +80000054: 00000b13 li s6,0 + li x23,0 +80000058: 00000b93 li s7,0 + li x24,0 +8000005c: 00000c13 li s8,0 + li x25,0 +80000060: 00000c93 li s9,0 + li x26,0 +80000064: 00000d13 li s10,0 + li x27,0 +80000068: 00000d93 li s11,0 + li x28,0 +8000006c: 00000e13 li t3,0 + li x29,0 +80000070: 00000e93 li t4,0 + li x30,0 +80000074: 00000f13 li t5,0 + li x31,0 +80000078: 00000f93 li t6,0 + + # enable FPU and accelerator if present + li t0, MSTATUS_FS | MSTATUS_XS +8000007c: 0001e2b7 lui t0,0x1e + csrs mstatus, t0 +80000080: 3002a073 csrs mstatus,t0 + + # make sure XLEN agrees with compilation choice + li t0, 1 +80000084: 00100293 li t0,1 + slli t0, t0, 31 +80000088: 01f29293 slli t0,t0,0x1f +#if __riscv_xlen == 64 + bgez t0, 1f +#else + bltz t0, 1f +8000008c: 0002ca63 bltz t0,800000a0 <_start+0xa0> +#endif +2: + li a0, 1 +80000090: 00100513 li a0,1 + sw a0, tohost, t0 +80000094: 00001297 auipc t0,0x1 +80000098: f6a2a623 sw a0,-148(t0) # 80001000 + j 2b +8000009c: ff5ff06f j 80000090 <_start+0x90> + fmv.s.x f31,x0 +1: +#endif + + # initialize trap vector + la t0, trap_entry +800000a0: 00000297 auipc t0,0x0 +800000a4: 04028293 addi t0,t0,64 # 800000e0 + csrw mtvec, t0 +800000a8: 30529073 csrw mtvec,t0 + + # initialize global pointer +.option push +.option norelax + la gp, __global_pointer$ +800000ac: 0000a197 auipc gp,0xa +800000b0: af418193 addi gp,gp,-1292 # 80009ba0 <__global_pointer$> +.option pop + + la tp, _end + 63 +800000b4: 95f18213 addi tp,gp,-1697 # 800094ff <_end+0x3f> + and tp, tp, -64 +800000b8: fc027213 andi tp,tp,-64 + + # get core id + csrr a0, mhartid +800000bc: f1402573 csrr a0,mhartid + # for now, assume only 1 core + li a1, 1 +800000c0: 00100593 li a1,1 +1:bgeu a0, a1, 1b +800000c4: 00b57063 bleu a1,a0,800000c4 <_start+0xc4> + + # give each core 128KB of stack + TLS +#define STKSHIFT 17 + add sp, a0, 1 +800000c8: 00150113 addi sp,a0,1 + sll sp, sp, STKSHIFT +800000cc: 01111113 slli sp,sp,0x11 + add sp, sp, tp +800000d0: 00410133 add sp,sp,tp + sll a2, a0, STKSHIFT +800000d4: 01151613 slli a2,a0,0x11 + add tp, tp, a2 +800000d8: 00c20233 add tp,tp,a2 + + j _init +800000dc: 01d0506f j 800058f8 <_init> + +800000e0 : + + .align 2 +trap_entry: + addi sp, sp, -272 +800000e0: ef010113 addi sp,sp,-272 + + SREG x1, 1*REGBYTES(sp) +800000e4: 00112223 sw ra,4(sp) + SREG x2, 2*REGBYTES(sp) +800000e8: 00212423 sw sp,8(sp) + SREG x3, 3*REGBYTES(sp) +800000ec: 00312623 sw gp,12(sp) + SREG x4, 4*REGBYTES(sp) +800000f0: 00412823 sw tp,16(sp) + SREG x5, 5*REGBYTES(sp) +800000f4: 00512a23 sw t0,20(sp) + SREG x6, 6*REGBYTES(sp) +800000f8: 00612c23 sw t1,24(sp) + SREG x7, 7*REGBYTES(sp) +800000fc: 00712e23 sw t2,28(sp) + SREG x8, 8*REGBYTES(sp) +80000100: 02812023 sw s0,32(sp) + SREG x9, 9*REGBYTES(sp) +80000104: 02912223 sw s1,36(sp) + SREG x10, 10*REGBYTES(sp) +80000108: 02a12423 sw a0,40(sp) + SREG x11, 11*REGBYTES(sp) +8000010c: 02b12623 sw a1,44(sp) + SREG x12, 12*REGBYTES(sp) +80000110: 02c12823 sw a2,48(sp) + SREG x13, 13*REGBYTES(sp) +80000114: 02d12a23 sw a3,52(sp) + SREG x14, 14*REGBYTES(sp) +80000118: 02e12c23 sw a4,56(sp) + SREG x15, 15*REGBYTES(sp) +8000011c: 02f12e23 sw a5,60(sp) + SREG x16, 16*REGBYTES(sp) +80000120: 05012023 sw a6,64(sp) + SREG x17, 17*REGBYTES(sp) +80000124: 05112223 sw a7,68(sp) + SREG x18, 18*REGBYTES(sp) +80000128: 05212423 sw s2,72(sp) + SREG x19, 19*REGBYTES(sp) +8000012c: 05312623 sw s3,76(sp) + SREG x20, 20*REGBYTES(sp) +80000130: 05412823 sw s4,80(sp) + SREG x21, 21*REGBYTES(sp) +80000134: 05512a23 sw s5,84(sp) + SREG x22, 22*REGBYTES(sp) +80000138: 05612c23 sw s6,88(sp) + SREG x23, 23*REGBYTES(sp) +8000013c: 05712e23 sw s7,92(sp) + SREG x24, 24*REGBYTES(sp) +80000140: 07812023 sw s8,96(sp) + SREG x25, 25*REGBYTES(sp) +80000144: 07912223 sw s9,100(sp) + SREG x26, 26*REGBYTES(sp) +80000148: 07a12423 sw s10,104(sp) + SREG x27, 27*REGBYTES(sp) +8000014c: 07b12623 sw s11,108(sp) + SREG x28, 28*REGBYTES(sp) +80000150: 07c12823 sw t3,112(sp) + SREG x29, 29*REGBYTES(sp) +80000154: 07d12a23 sw t4,116(sp) + SREG x30, 30*REGBYTES(sp) +80000158: 07e12c23 sw t5,120(sp) + SREG x31, 31*REGBYTES(sp) +8000015c: 07f12e23 sw t6,124(sp) + + csrr a0, mcause +80000160: 34202573 csrr a0,mcause + csrr a1, mepc +80000164: 341025f3 csrr a1,mepc + mv a2, sp +80000168: 00010613 mv a2,sp + jal handle_trap +8000016c: 0d4050ef jal ra,80005240 + csrw mepc, a0 +80000170: 34151073 csrw mepc,a0 + + # Remain in M-mode after eret + li t0, MSTATUS_MPP +80000174: 000022b7 lui t0,0x2 +80000178: 80028293 addi t0,t0,-2048 # 1800 + csrs mstatus, t0 +8000017c: 3002a073 csrs mstatus,t0 + + LREG x1, 1*REGBYTES(sp) +80000180: 00412083 lw ra,4(sp) + LREG x2, 2*REGBYTES(sp) +80000184: 00812103 lw sp,8(sp) + LREG x3, 3*REGBYTES(sp) +80000188: 00c12183 lw gp,12(sp) + LREG x4, 4*REGBYTES(sp) +8000018c: 01012203 lw tp,16(sp) + LREG x5, 5*REGBYTES(sp) +80000190: 01412283 lw t0,20(sp) + LREG x6, 6*REGBYTES(sp) +80000194: 01812303 lw t1,24(sp) + LREG x7, 7*REGBYTES(sp) +80000198: 01c12383 lw t2,28(sp) + LREG x8, 8*REGBYTES(sp) +8000019c: 02012403 lw s0,32(sp) + LREG x9, 9*REGBYTES(sp) +800001a0: 02412483 lw s1,36(sp) + LREG x10, 10*REGBYTES(sp) +800001a4: 02812503 lw a0,40(sp) + LREG x11, 11*REGBYTES(sp) +800001a8: 02c12583 lw a1,44(sp) + LREG x12, 12*REGBYTES(sp) +800001ac: 03012603 lw a2,48(sp) + LREG x13, 13*REGBYTES(sp) +800001b0: 03412683 lw a3,52(sp) + LREG x14, 14*REGBYTES(sp) +800001b4: 03812703 lw a4,56(sp) + LREG x15, 15*REGBYTES(sp) +800001b8: 03c12783 lw a5,60(sp) + LREG x16, 16*REGBYTES(sp) +800001bc: 04012803 lw a6,64(sp) + LREG x17, 17*REGBYTES(sp) +800001c0: 04412883 lw a7,68(sp) + LREG x18, 18*REGBYTES(sp) +800001c4: 04812903 lw s2,72(sp) + LREG x19, 19*REGBYTES(sp) +800001c8: 04c12983 lw s3,76(sp) + LREG x20, 20*REGBYTES(sp) +800001cc: 05012a03 lw s4,80(sp) + LREG x21, 21*REGBYTES(sp) +800001d0: 05412a83 lw s5,84(sp) + LREG x22, 22*REGBYTES(sp) +800001d4: 05812b03 lw s6,88(sp) + LREG x23, 23*REGBYTES(sp) +800001d8: 05c12b83 lw s7,92(sp) + LREG x24, 24*REGBYTES(sp) +800001dc: 06012c03 lw s8,96(sp) + LREG x25, 25*REGBYTES(sp) +800001e0: 06412c83 lw s9,100(sp) + LREG x26, 26*REGBYTES(sp) +800001e4: 06812d03 lw s10,104(sp) + LREG x27, 27*REGBYTES(sp) +800001e8: 06c12d83 lw s11,108(sp) + LREG x28, 28*REGBYTES(sp) +800001ec: 07012e03 lw t3,112(sp) + LREG x29, 29*REGBYTES(sp) +800001f0: 07412e83 lw t4,116(sp) + LREG x30, 30*REGBYTES(sp) +800001f4: 07812f03 lw t5,120(sp) + LREG x31, 31*REGBYTES(sp) +800001f8: 07c12f83 lw t6,124(sp) + + addi sp, sp, 272 +800001fc: 11010113 addi sp,sp,272 + mret +80000200: 30200073 mret + +Disassembly of section .text: + +80001048 : +size_t pqueue_size(pqueue_t *q) { + // Queue element 0 exists but doesn't count since it isn't used. + return (q->size - 1); +} + +static size_t maxchild(pqueue_t *q, size_t i) { +80001048: fe010113 addi sp,sp,-32 +8000104c: 00112e23 sw ra,28(sp) +80001050: 00812c23 sw s0,24(sp) +80001054: 00912a23 sw s1,20(sp) +80001058: 01212823 sw s2,16(sp) +8000105c: 01312623 sw s3,12(sp) +80001060: 01412423 sw s4,8(sp) +80001064: 01512223 sw s5,4(sp) + size_t child_node = left(i); +80001068: 00159913 slli s2,a1,0x1 + + if (child_node >= q->size) +8000106c: 00052783 lw a5,0(a0) +80001070: 06f97663 bleu a5,s2,800010dc + return 0; + + if ((child_node+1) < q->size && +80001074: 00190493 addi s1,s2,1 +80001078: 08f4f863 bleu a5,s1,80001108 +8000107c: 00050413 mv s0,a0 + (q->cmppri(q->getpri(q->d[child_node]), q->getpri(q->d[child_node+1])))) +80001080: 00c52983 lw s3,12(a0) +80001084: 01052703 lw a4,16(a0) +80001088: 02452783 lw a5,36(a0) +8000108c: 00291693 slli a3,s2,0x2 +80001090: 00d787b3 add a5,a5,a3 +80001094: 0007a503 lw a0,0(a5) +80001098: 000700e7 jalr a4 +8000109c: 00050a13 mv s4,a0 +800010a0: 00058a93 mv s5,a1 +800010a4: 01042703 lw a4,16(s0) +800010a8: 02442783 lw a5,36(s0) +800010ac: 00249693 slli a3,s1,0x2 +800010b0: 00d787b3 add a5,a5,a3 +800010b4: 0007a503 lw a0,0(a5) +800010b8: 000700e7 jalr a4 +800010bc: 00050613 mv a2,a0 +800010c0: 00058693 mv a3,a1 +800010c4: 000a0513 mv a0,s4 +800010c8: 000a8593 mv a1,s5 +800010cc: 000980e7 jalr s3 + if ((child_node+1) < q->size && +800010d0: 00051863 bnez a0,800010e0 + size_t child_node = left(i); +800010d4: 00090493 mv s1,s2 +800010d8: 0080006f j 800010e0 + return 0; +800010dc: 00000493 li s1,0 + child_node++; /* use right child instead of left */ + + return child_node; +} +800010e0: 00048513 mv a0,s1 +800010e4: 01c12083 lw ra,28(sp) +800010e8: 01812403 lw s0,24(sp) +800010ec: 01412483 lw s1,20(sp) +800010f0: 01012903 lw s2,16(sp) +800010f4: 00c12983 lw s3,12(sp) +800010f8: 00812a03 lw s4,8(sp) +800010fc: 00412a83 lw s5,4(sp) +80001100: 02010113 addi sp,sp,32 +80001104: 00008067 ret + size_t child_node = left(i); +80001108: 00090493 mv s1,s2 +8000110c: fd5ff06f j 800010e0 + +80001110 : + +static size_t bubble_up(pqueue_t *q, size_t i) { +80001110: fd010113 addi sp,sp,-48 +80001114: 02112623 sw ra,44(sp) +80001118: 02812423 sw s0,40(sp) +8000111c: 02912223 sw s1,36(sp) +80001120: 03212023 sw s2,32(sp) +80001124: 01312e23 sw s3,28(sp) +80001128: 01412c23 sw s4,24(sp) +8000112c: 01512a23 sw s5,20(sp) +80001130: 01612823 sw s6,16(sp) +80001134: 01712623 sw s7,12(sp) +80001138: 00050413 mv s0,a0 +8000113c: 00058493 mv s1,a1 + size_t parent_node; + void *moving_node = q->d[i]; +80001140: 02452783 lw a5,36(a0) +80001144: 00259713 slli a4,a1,0x2 +80001148: 00e787b3 add a5,a5,a4 +8000114c: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001150: 01052783 lw a5,16(a0) +80001154: 000a8513 mv a0,s5 +80001158: 000780e7 jalr a5 +8000115c: 00050913 mv s2,a0 +80001160: 00058993 mv s3,a1 + + for (parent_node = parent(i); +80001164: 0014da13 srli s4,s1,0x1 +80001168: 03c0006f j 800011a4 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); + i = parent_node, parent_node = parent(i)) + { + q->d[i] = q->d[parent_node]; +8000116c: 02442783 lw a5,36(s0) +80001170: 00249713 slli a4,s1,0x2 +80001174: 00e786b3 add a3,a5,a4 +80001178: 016787b3 add a5,a5,s6 +8000117c: 0007a783 lw a5,0(a5) +80001180: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001184: 01842683 lw a3,24(s0) +80001188: 02442783 lw a5,36(s0) +8000118c: 00e787b3 add a5,a5,a4 +80001190: 00048593 mv a1,s1 +80001194: 0007a503 lw a0,0(a5) +80001198: 000680e7 jalr a3 + i = parent_node, parent_node = parent(i)) +8000119c: 000a0493 mv s1,s4 +800011a0: 001a5a13 srli s4,s4,0x1 + for (parent_node = parent(i); +800011a4: 00100793 li a5,1 +800011a8: 0297f863 bleu s1,a5,800011d8 + ((i > 1) && q->cmppri(q->getpri(q->d[parent_node]), moving_pri)); +800011ac: 00c42b83 lw s7,12(s0) +800011b0: 01042703 lw a4,16(s0) +800011b4: 02442783 lw a5,36(s0) +800011b8: 002a1b13 slli s6,s4,0x2 +800011bc: 016787b3 add a5,a5,s6 +800011c0: 0007a503 lw a0,0(a5) +800011c4: 000700e7 jalr a4 +800011c8: 00090613 mv a2,s2 +800011cc: 00098693 mv a3,s3 +800011d0: 000b80e7 jalr s7 +800011d4: f8051ce3 bnez a0,8000116c + } + + q->d[i] = moving_node; +800011d8: 02442783 lw a5,36(s0) +800011dc: 00249713 slli a4,s1,0x2 +800011e0: 00e787b3 add a5,a5,a4 +800011e4: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +800011e8: 01842783 lw a5,24(s0) +800011ec: 00048593 mv a1,s1 +800011f0: 000a8513 mv a0,s5 +800011f4: 000780e7 jalr a5 + return i; +} +800011f8: 00048513 mv a0,s1 +800011fc: 02c12083 lw ra,44(sp) +80001200: 02812403 lw s0,40(sp) +80001204: 02412483 lw s1,36(sp) +80001208: 02012903 lw s2,32(sp) +8000120c: 01c12983 lw s3,28(sp) +80001210: 01812a03 lw s4,24(sp) +80001214: 01412a83 lw s5,20(sp) +80001218: 01012b03 lw s6,16(sp) +8000121c: 00c12b83 lw s7,12(sp) +80001220: 03010113 addi sp,sp,48 +80001224: 00008067 ret + +80001228 : + +static void percolate_down(pqueue_t *q, size_t i) { +80001228: fd010113 addi sp,sp,-48 +8000122c: 02112623 sw ra,44(sp) +80001230: 02812423 sw s0,40(sp) +80001234: 02912223 sw s1,36(sp) +80001238: 03212023 sw s2,32(sp) +8000123c: 01312e23 sw s3,28(sp) +80001240: 01412c23 sw s4,24(sp) +80001244: 01512a23 sw s5,20(sp) +80001248: 01612823 sw s6,16(sp) +8000124c: 01712623 sw s7,12(sp) +80001250: 00050413 mv s0,a0 +80001254: 00058493 mv s1,a1 + size_t child_node; + void *moving_node = q->d[i]; +80001258: 02452783 lw a5,36(a0) +8000125c: 00259713 slli a4,a1,0x2 +80001260: 00e787b3 add a5,a5,a4 +80001264: 0007aa83 lw s5,0(a5) + pqueue_pri_t moving_pri = q->getpri(moving_node); +80001268: 01052783 lw a5,16(a0) +8000126c: 000a8513 mv a0,s5 +80001270: 000780e7 jalr a5 +80001274: 00050913 mv s2,a0 +80001278: 00058993 mv s3,a1 + + while ((child_node = maxchild(q, i)) && +8000127c: 0380006f j 800012b4 + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) + { + q->d[i] = q->d[child_node]; +80001280: 02442783 lw a5,36(s0) +80001284: 00249713 slli a4,s1,0x2 +80001288: 00e786b3 add a3,a5,a4 +8000128c: 016787b3 add a5,a5,s6 +80001290: 0007a783 lw a5,0(a5) +80001294: 00f6a023 sw a5,0(a3) + q->setpos(q->d[i], i); +80001298: 01842683 lw a3,24(s0) +8000129c: 02442783 lw a5,36(s0) +800012a0: 00e787b3 add a5,a5,a4 +800012a4: 00048593 mv a1,s1 +800012a8: 0007a503 lw a0,0(a5) +800012ac: 000680e7 jalr a3 + i = child_node; +800012b0: 000a0493 mv s1,s4 + while ((child_node = maxchild(q, i)) && +800012b4: 00048593 mv a1,s1 +800012b8: 00040513 mv a0,s0 +800012bc: d8dff0ef jal ra,80001048 +800012c0: 00050a13 mv s4,a0 +800012c4: 02050c63 beqz a0,800012fc + q->cmppri(moving_pri, q->getpri(q->d[child_node]))) +800012c8: 00c42b83 lw s7,12(s0) +800012cc: 01042703 lw a4,16(s0) +800012d0: 02442783 lw a5,36(s0) +800012d4: 00251b13 slli s6,a0,0x2 +800012d8: 016787b3 add a5,a5,s6 +800012dc: 0007a503 lw a0,0(a5) +800012e0: 000700e7 jalr a4 +800012e4: 00050613 mv a2,a0 +800012e8: 00058693 mv a3,a1 +800012ec: 00090513 mv a0,s2 +800012f0: 00098593 mv a1,s3 +800012f4: 000b80e7 jalr s7 + while ((child_node = maxchild(q, i)) && +800012f8: f80514e3 bnez a0,80001280 + } + + q->d[i] = moving_node; +800012fc: 02442783 lw a5,36(s0) +80001300: 00249713 slli a4,s1,0x2 +80001304: 00e787b3 add a5,a5,a4 +80001308: 0157a023 sw s5,0(a5) + q->setpos(moving_node, i); +8000130c: 01842783 lw a5,24(s0) +80001310: 00048593 mv a1,s1 +80001314: 000a8513 mv a0,s5 +80001318: 000780e7 jalr a5 +} +8000131c: 02c12083 lw ra,44(sp) +80001320: 02812403 lw s0,40(sp) +80001324: 02412483 lw s1,36(sp) +80001328: 02012903 lw s2,32(sp) +8000132c: 01c12983 lw s3,28(sp) +80001330: 01812a03 lw s4,24(sp) +80001334: 01412a83 lw s5,20(sp) +80001338: 01012b03 lw s6,16(sp) +8000133c: 00c12b83 lw s7,12(sp) +80001340: 03010113 addi sp,sp,48 +80001344: 00008067 ret + +80001348 : + print(out, e); + + pqueue_free(dup); +} + +static int subtree_is_valid(pqueue_t *q, int pos) { +80001348: fe010113 addi sp,sp,-32 +8000134c: 00112e23 sw ra,28(sp) +80001350: 00812c23 sw s0,24(sp) +80001354: 00912a23 sw s1,20(sp) +80001358: 01212823 sw s2,16(sp) +8000135c: 01312623 sw s3,12(sp) +80001360: 01412423 sw s4,8(sp) +80001364: 01512223 sw s5,4(sp) +80001368: 01612023 sw s6,0(sp) +8000136c: 00050413 mv s0,a0 +80001370: 00058a13 mv s4,a1 + if (left(pos) < q->size) { +80001374: 00159493 slli s1,a1,0x1 +80001378: 00052783 lw a5,0(a0) +8000137c: 08f4fa63 bleu a5,s1,80001410 + /* has a left child */ + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) +80001380: 00c52a83 lw s5,12(a0) +80001384: 01052703 lw a4,16(a0) +80001388: 02452783 lw a5,36(a0) +8000138c: 00259693 slli a3,a1,0x2 +80001390: 00d787b3 add a5,a5,a3 +80001394: 0007a503 lw a0,0(a5) +80001398: 000700e7 jalr a4 +8000139c: 00050913 mv s2,a0 +800013a0: 00058993 mv s3,a1 +800013a4: 01042703 lw a4,16(s0) +800013a8: 02442783 lw a5,36(s0) +800013ac: 00249693 slli a3,s1,0x2 +800013b0: 00d787b3 add a5,a5,a3 +800013b4: 0007a503 lw a0,0(a5) +800013b8: 000700e7 jalr a4 +800013bc: 00050613 mv a2,a0 +800013c0: 00058693 mv a3,a1 +800013c4: 00090513 mv a0,s2 +800013c8: 00098593 mv a1,s3 +800013cc: 000a80e7 jalr s5 +800013d0: 02050863 beqz a0,80001400 + return 0; +800013d4: 00000513 li a0,0 + return 0; + if (!subtree_is_valid(q, right(pos))) + return 0; + } + return 1; +} +800013d8: 01c12083 lw ra,28(sp) +800013dc: 01812403 lw s0,24(sp) +800013e0: 01412483 lw s1,20(sp) +800013e4: 01012903 lw s2,16(sp) +800013e8: 00c12983 lw s3,12(sp) +800013ec: 00812a03 lw s4,8(sp) +800013f0: 00412a83 lw s5,4(sp) +800013f4: 00012b03 lw s6,0(sp) +800013f8: 02010113 addi sp,sp,32 +800013fc: 00008067 ret + if (!subtree_is_valid(q, left(pos))) +80001400: 00048593 mv a1,s1 +80001404: 00040513 mv a0,s0 +80001408: f41ff0ef jal ra,80001348 +8000140c: fc0506e3 beqz a0,800013d8 + if (right(pos) < q->size) { +80001410: 00148a93 addi s5,s1,1 +80001414: 00042783 lw a5,0(s0) +80001418: 06fafc63 bleu a5,s5,80001490 + if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) +8000141c: 00c42b03 lw s6,12(s0) +80001420: 01042703 lw a4,16(s0) +80001424: 02442783 lw a5,36(s0) +80001428: 002a1a13 slli s4,s4,0x2 +8000142c: 01478a33 add s4,a5,s4 +80001430: 000a2503 lw a0,0(s4) +80001434: 000700e7 jalr a4 +80001438: 00050913 mv s2,a0 +8000143c: 00058993 mv s3,a1 +80001440: 01042703 lw a4,16(s0) +80001444: 02442783 lw a5,36(s0) +80001448: 002a9493 slli s1,s5,0x2 +8000144c: 009784b3 add s1,a5,s1 +80001450: 0004a503 lw a0,0(s1) +80001454: 000700e7 jalr a4 +80001458: 00050613 mv a2,a0 +8000145c: 00058693 mv a3,a1 +80001460: 00090513 mv a0,s2 +80001464: 00098593 mv a1,s3 +80001468: 000b00e7 jalr s6 +8000146c: 00050663 beqz a0,80001478 + return 0; +80001470: 00000513 li a0,0 +80001474: f65ff06f j 800013d8 + if (!subtree_is_valid(q, right(pos))) +80001478: 000a8593 mv a1,s5 +8000147c: 00040513 mv a0,s0 +80001480: ec9ff0ef jal ra,80001348 +80001484: f4050ae3 beqz a0,800013d8 + return 1; +80001488: 00100513 li a0,1 +8000148c: f4dff06f j 800013d8 +80001490: 00100513 li a0,1 +80001494: f45ff06f j 800013d8 + +80001498 : + +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_reverse_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return (thiz > that); +80001498: 00100793 li a5,1 +8000149c: 00b6e663 bltu a3,a1,800014a8 +800014a0: 00d58863 beq a1,a3,800014b0 +800014a4: 00000793 li a5,0 +} +800014a8: 00078513 mv a0,a5 +800014ac: 00008067 ret + return (thiz > that); +800014b0: fea66ce3 bltu a2,a0,800014a8 +800014b4: ff1ff06f j 800014a4 + +800014b8 : +/** + * Return whether the first and second argument are given in reverse order. + */ +static int in_no_particular_order(pqueue_pri_t thiz, pqueue_pri_t that) { + return false; +} +800014b8: 00000513 li a0,0 +800014bc: 00008067 ret + +800014c0 : + +/** + * Return whether or not the given events have matching triggers. + */ +static int event_matches(void* next, void* curr) { + return (((event_t*)next)->trigger == ((event_t*)curr)->trigger); +800014c0: 00852503 lw a0,8(a0) +800014c4: 0085a783 lw a5,8(a1) +800014c8: 40f50533 sub a0,a0,a5 +} +800014cc: 00153513 seqz a0,a0 +800014d0: 00008067 ret + +800014d4 : +/** + * Return whether or not the given reaction_t pointers + * point to the same struct. + */ +static int reaction_matches(void* next, void* curr) { + return (next == curr); +800014d4: 40b50533 sub a0,a0,a1 +} +800014d8: 00153513 seqz a0,a0 +800014dc: 00008067 ret + +800014e0 : + * Report a priority equal to the time of the given event. + * Used for sorting pointers to event_t structs in the event queue. + */ +static pqueue_pri_t get_event_time(void *a) { + return (pqueue_pri_t)(((event_t*) a)->time); +} +800014e0: 00452583 lw a1,4(a0) +800014e4: 00052503 lw a0,0(a0) +800014e8: 00008067 ret + +800014ec : + * Used for sorting pointers to reaction_t structs in the + * blocked and executing queues. + */ +static pqueue_pri_t get_reaction_index(void *a) { + return ((reaction_t*) a)->index; +} +800014ec: 01452583 lw a1,20(a0) +800014f0: 01052503 lw a0,16(a0) +800014f4: 00008067 ret + +800014f8 : +/** + * Return the given event's position in the queue. + */ +static size_t get_event_position(void *a) { + return ((event_t*) a)->pos; +} +800014f8: 00c52503 lw a0,12(a0) +800014fc: 00008067 ret + +80001500 : +/** + * Return the given reaction's position in the queue. + */ +static size_t get_reaction_position(void *a) { + return ((reaction_t*) a)->pos; +} +80001500: 02052503 lw a0,32(a0) +80001504: 00008067 ret + +80001508 : + +/** + * Set the given event's position in the queue. + */ +static void set_event_position(void *a, size_t pos) { + ((event_t*) a)->pos = pos; +80001508: 00b52623 sw a1,12(a0) +} +8000150c: 00008067 ret + +80001510 : + +/** + * Return the given reaction's position in the queue. + */ +static void set_reaction_position(void *a, size_t pos) { + ((reaction_t*) a)->pos = pos; +80001510: 02b52023 sw a1,32(a0) +} +80001514: 00008067 ret + +80001518 : + */ +static void print_reaction(FILE *out, void *reaction) { + reaction_t *r = (reaction_t*)reaction; + // fprintf(out, "chain_id:%llu, index: %llu, reaction: %p\n", + // r->chain_id, r->index, r); +} +80001518: 00008067 ret + +8000151c : + */ +static void print_event(FILE *out, void *event) { + event_t *e = (event_t*)event; + // fprintf(out, "time: %lld, trigger: %p, token: %p\n", + // e->time, e->trigger, e->token); +} +8000151c: 00008067 ret + +80001520 : +80001520: 02c52703 lw a4,44(a0) +80001524: 149a07b7 lui a5,0x149a0 +80001528: 00478793 addi a5,a5,4 # 149a0004 +8000152c: 0efff697 auipc a3,0xefff +80001530: acf6aa23 sw a5,-1324(a3) # 8f000000 +80001534: 00174783 lbu a5,1(a4) +80001538: 00078663 beqz a5,80001544 +8000153c: 00074683 lbu a3,0(a4) +80001540: 00069c63 bnez a3,80001558 +80001544: 00078e63 beqz a5,80001560 +80001548: 00074783 lbu a5,0(a4) +8000154c: 00079a63 bnez a5,80001560 +80001550: 00052223 sw zero,4(a0) +80001554: 00c0006f j 80001560 +80001558: 00100793 li a5,1 +8000155c: 00f52223 sw a5,4(a0) +80001560: 249a07b7 lui a5,0x249a0 +80001564: 00478793 addi a5,a5,4 # 249a0004 +80001568: 0efff717 auipc a4,0xefff +8000156c: a8f72c23 sw a5,-1384(a4) # 8f000000 +80001570: 00008067 ret + +80001574 : +80001574: 0efff717 auipc a4,0xefff +80001578: a8c70713 addi a4,a4,-1396 # 8f000000 +8000157c: 149a07b7 lui a5,0x149a0 +80001580: 00678793 addi a5,a5,6 # 149a0006 +80001584: 00f72023 sw a5,0(a4) +80001588: 249a07b7 lui a5,0x249a0 +8000158c: 00678793 addi a5,a5,6 # 249a0006 +80001590: 00f72023 sw a5,0(a4) +80001594: 00008067 ret + +80001598 : +80001598: 00852783 lw a5,8(a0) +8000159c: 0047c703 lbu a4,4(a5) +800015a0: 02071663 bnez a4,800015cc +800015a4: 0007a823 sw zero,16(a5) +800015a8: 0efff717 auipc a4,0xefff +800015ac: a5870713 addi a4,a4,-1448 # 8f000000 +800015b0: 149a07b7 lui a5,0x149a0 +800015b4: 00778793 addi a5,a5,7 # 149a0007 +800015b8: 00f72023 sw a5,0(a4) +800015bc: 249a07b7 lui a5,0x249a0 +800015c0: 00778793 addi a5,a5,7 # 249a0007 +800015c4: 00f72023 sw a5,0(a4) +800015c8: 00008067 ret +800015cc: 00c7a703 lw a4,12(a5) +800015d0: 00872683 lw a3,8(a4) +800015d4: 00d7a823 sw a3,16(a5) +800015d8: 00072703 lw a4,0(a4) +800015dc: 00e7a023 sw a4,0(a5) +800015e0: fc9ff06f j 800015a8 + +800015e4 : +800015e4: 1ec54783 lbu a5,492(a0) +800015e8: 00f508a3 sb a5,17(a0) +800015ec: 1d852703 lw a4,472(a0) +800015f0: 06070263 beqz a4,80001654 +800015f4: 00072783 lw a5,0(a4) +800015f8: 00078463 beqz a5,80001600 +800015fc: 00100793 li a5,1 +80001600: 00f50923 sb a5,18(a0) +80001604: 00e52a23 sw a4,20(a0) +80001608: 00078863 beqz a5,80001618 +8000160c: 00072783 lw a5,0(a4) +80001610: 0007c783 lbu a5,0(a5) +80001614: 00f50823 sb a5,16(a0) +80001618: 0efff717 auipc a4,0xefff +8000161c: 9e870713 addi a4,a4,-1560 # 8f000000 +80001620: 149a07b7 lui a5,0x149a0 +80001624: 00278793 addi a5,a5,2 # 149a0002 +80001628: 00f72023 sw a5,0(a4) +8000162c: 00454783 lbu a5,4(a0) +80001630: 0017c793 xori a5,a5,1 +80001634: 00f50223 sb a5,4(a0) +80001638: 00f50c23 sb a5,24(a0) +8000163c: 00100793 li a5,1 +80001640: 00f50ca3 sb a5,25(a0) +80001644: 249a07b7 lui a5,0x249a0 +80001648: 00278793 addi a5,a5,2 # 249a0002 +8000164c: 00f72023 sw a5,0(a4) +80001650: 00008067 ret +80001654: 00000793 li a5,0 +80001658: fa9ff06f j 80001600 + +8000165c : +8000165c: 149a07b7 lui a5,0x149a0 +80001660: 00378793 addi a5,a5,3 # 149a0003 +80001664: 0efff717 auipc a4,0xefff +80001668: 98f72e23 sw a5,-1636(a4) # 8f000000 +8000166c: 00852783 lw a5,8(a0) +80001670: 02078663 beqz a5,8000169c +80001674: 02050223 sb zero,36(a0) +80001678: 00100713 li a4,1 +8000167c: 02e502a3 sb a4,37(a0) +80001680: fff78793 addi a5,a5,-1 +80001684: 00f52423 sw a5,8(a0) +80001688: 249a07b7 lui a5,0x249a0 +8000168c: 00378793 addi a5,a5,3 # 249a0003 +80001690: 0efff717 auipc a4,0xefff +80001694: 96f72823 sw a5,-1680(a4) # 8f000000 +80001698: 00008067 ret +8000169c: 00100793 li a5,1 +800016a0: 02f50223 sb a5,36(a0) +800016a4: 02f502a3 sb a5,37(a0) +800016a8: 01900793 li a5,25 +800016ac: 00f52423 sw a5,8(a0) +800016b0: fd9ff06f j 80001688 + +800016b4 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags(tag_t tag1, tag_t tag2) { + if (tag1.time < tag2.time) { +800016b4: 00052603 lw a2,0(a0) +800016b8: 00452703 lw a4,4(a0) +800016bc: 0005a683 lw a3,0(a1) +800016c0: 0045a783 lw a5,4(a1) +800016c4: 02f74663 blt a4,a5,800016f0 +800016c8: 02e78263 beq a5,a4,800016ec + return -1; + } else if (tag1.time > tag2.time) { +800016cc: 02e7c863 blt a5,a4,800016fc +800016d0: 02f70463 beq a4,a5,800016f8 + return 1; + } else if (tag1.microstep < tag2.microstep) { +800016d4: 00852703 lw a4,8(a0) +800016d8: 0085a783 lw a5,8(a1) +800016dc: 02f76863 bltu a4,a5,8000170c + return -1; + } else if (tag1.microstep > tag2.microstep) { +800016e0: 02e7e263 bltu a5,a4,80001704 + return 1; + } else { + return 0; +800016e4: 00000513 li a0,0 + } +} +800016e8: 00008067 ret + if (tag1.time < tag2.time) { +800016ec: fed670e3 bleu a3,a2,800016cc + return -1; +800016f0: fff00513 li a0,-1 +800016f4: 00008067 ret + } else if (tag1.time > tag2.time) { +800016f8: fcc6fee3 bleu a2,a3,800016d4 + return 1; +800016fc: 00100513 li a0,1 +80001700: 00008067 ret + return 1; +80001704: 00100513 li a0,1 +80001708: 00008067 ret + return -1; +8000170c: fff00513 li a0,-1 +80001710: 00008067 ret + +80001714 : + * @param tag1 + * @param tag2 + * @return -1, 0, or 1 depending on the relation. + */ +int compare_tags2(instant_t time1, microstep_t microstep1, instant_t time2, microstep_t microstep2) { + if (time1 < time2) { +80001714: 02e5c263 blt a1,a4,80001738 +80001718: 00b70e63 beq a4,a1,80001734 + return -1; + } else if (time1 > time2) { +8000171c: 02b74463 blt a4,a1,80001744 +80001720: 02e58063 beq a1,a4,80001740 + return 1; + } else if (microstep1 < microstep2) { +80001724: 02f66863 bltu a2,a5,80001754 + return -1; + } else if (microstep1 > microstep2) { +80001728: 02c7e263 bltu a5,a2,8000174c + return 1; + } else { + return 0; +8000172c: 00000513 li a0,0 + } +} +80001730: 00008067 ret + if (time1 < time2) { +80001734: fed574e3 bleu a3,a0,8000171c + return -1; +80001738: fff00513 li a0,-1 +8000173c: 00008067 ret + } else if (time1 > time2) { +80001740: fea6f2e3 bleu a0,a3,80001724 + return 1; +80001744: 00100513 li a0,1 +80001748: 00008067 ret + return 1; +8000174c: 00100513 li a0,1 +80001750: 00008067 ret + return -1; +80001754: fff00513 li a0,-1 +80001758: 00008067 ret + +8000175c : + +/** + * Return the elapsed logical time in nanoseconds since the start of execution. + */ +interval_t get_elapsed_logical_time() { + return current_tag.time - start_time; +8000175c: 8d818793 addi a5,gp,-1832 # 80009478 +80001760: 0007a583 lw a1,0(a5) +80001764: 0047a783 lw a5,4(a5) +80001768: 82018713 addi a4,gp,-2016 # 800093c0 +8000176c: 00072503 lw a0,0(a4) +80001770: 00472703 lw a4,4(a4) +80001774: 40a58533 sub a0,a1,a0 +80001778: 00a5b5b3 sltu a1,a1,a0 +8000177c: 40e787b3 sub a5,a5,a4 +80001780: 40b785b3 sub a1,a5,a1 +} +80001784: 00008067 ret + +80001788 : + +/** + * Return the current tag, a logical time, microstep pair. + */ +tag_t get_current_tag() { + return current_tag; +80001788: 8d818713 addi a4,gp,-1832 # 80009478 +8000178c: 00072583 lw a1,0(a4) +80001790: 00472603 lw a2,4(a4) +80001794: 00872683 lw a3,8(a4) +80001798: 00c72703 lw a4,12(a4) +8000179c: 00b52023 sw a1,0(a0) +800017a0: 00c52223 sw a2,4(a0) +800017a4: 00d52423 sw a3,8(a0) +800017a8: 00e52623 sw a4,12(a0) +} +800017ac: 00008067 ret + +800017b0 : +/** + * Return the current logical time in nanoseconds since January 1, 1970. + */ +instant_t get_logical_time() { + return current_tag.time; +} +800017b0: 8d818793 addi a5,gp,-1832 # 80009478 +800017b4: 0007a503 lw a0,0(a5) +800017b8: 0047a583 lw a1,4(a5) +800017bc: 00008067 ret + +800017c0 : +/** + * Return the current microstep. + */ +microstep_t get_microstep() { + return current_tag.microstep; +} +800017c0: 8d818793 addi a5,gp,-1832 # 80009478 +800017c4: 0087a503 lw a0,8(a5) +800017c8: 00008067 ret + +800017cc : + * since January 1, 1970, but it is actually platform dependent. + * @return A time instant. + */ +instant_t get_start_time() { + return start_time; +} +800017cc: 82018793 addi a5,gp,-2016 # 800093c0 +800017d0: 0007a503 lw a0,0(a5) +800017d4: 0047a583 lw a1,4(a5) +800017d8: 00008067 ret + +800017dc : +/** + * @note This is an undefined behavior in C and should + * be used with utmost caution. See Section 6.7.2 of the C99 standard. + */ +tag_t convert_volatile_tag_to_nonvolatile(tag_t volatile vtag) { + return vtag; +800017dc: 0005a803 lw a6,0(a1) +800017e0: 0045a603 lw a2,4(a1) +800017e4: 0085a683 lw a3,8(a1) +800017e8: 00c5a703 lw a4,12(a1) +800017ec: 01052023 sw a6,0(a0) +800017f0: 00c52223 sw a2,4(a0) +800017f4: 00d52423 sw a3,8(a0) +800017f8: 00e52623 sw a4,12(a0) +} +800017fc: 00008067 ret + +80001800 : +void* find_equal(pqueue_t *q, void *e, int pos, pqueue_pri_t max) { +80001800: fe010113 addi sp,sp,-32 +80001804: 00112e23 sw ra,28(sp) +80001808: 00812c23 sw s0,24(sp) +8000180c: 00912a23 sw s1,20(sp) +80001810: 01212823 sw s2,16(sp) +80001814: 01312623 sw s3,12(sp) +80001818: 01412423 sw s4,8(sp) +8000181c: 01512223 sw s5,4(sp) +80001820: 01612023 sw s6,0(sp) +80001824: 00070993 mv s3,a4 + void* curr = q->d[pos]; +80001828: 02452783 lw a5,36(a0) +8000182c: 00261713 slli a4,a2,0x2 +80001830: 00e787b3 add a5,a5,a4 +80001834: 0007aa03 lw s4,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), max)) { +80001838: 0c050263 beqz a0,800018fc +8000183c: 00068913 mv s2,a3 +80001840: 00052783 lw a5,0(a0) +80001844: 0cf67063 bleu a5,a2,80001904 +80001848: 040a0263 beqz s4,8000188c +8000184c: 00060493 mv s1,a2 +80001850: 00058a93 mv s5,a1 +80001854: 00050413 mv s0,a0 +80001858: 00c52b03 lw s6,12(a0) +8000185c: 01052783 lw a5,16(a0) +80001860: 000a0513 mv a0,s4 +80001864: 000780e7 jalr a5 +80001868: 00090613 mv a2,s2 +8000186c: 00098693 mv a3,s3 +80001870: 000b00e7 jalr s6 +80001874: 08051c63 bnez a0,8000190c + if (q->eqelem(curr, e)) { +80001878: 01c42783 lw a5,28(s0) +8000187c: 000a8593 mv a1,s5 +80001880: 000a0513 mv a0,s4 +80001884: 000780e7 jalr a5 +80001888: 02050863 beqz a0,800018b8 +} +8000188c: 000a0513 mv a0,s4 +80001890: 01c12083 lw ra,28(sp) +80001894: 01812403 lw s0,24(sp) +80001898: 01412483 lw s1,20(sp) +8000189c: 01012903 lw s2,16(sp) +800018a0: 00c12983 lw s3,12(sp) +800018a4: 00812a03 lw s4,8(sp) +800018a8: 00412a83 lw s5,4(sp) +800018ac: 00012b03 lw s6,0(sp) +800018b0: 02010113 addi sp,sp,32 +800018b4: 00008067 ret + rval = find_equal(q, e, left(pos), max); +800018b8: 00149493 slli s1,s1,0x1 +800018bc: 00090693 mv a3,s2 +800018c0: 00098713 mv a4,s3 +800018c4: 00048613 mv a2,s1 +800018c8: 000a8593 mv a1,s5 +800018cc: 00040513 mv a0,s0 +800018d0: f31ff0ef jal ra,80001800 +800018d4: 00050a13 mv s4,a0 + if (rval) +800018d8: fa051ae3 bnez a0,8000188c + return find_equal(q, e, right(pos), max); +800018dc: 00090693 mv a3,s2 +800018e0: 00098713 mv a4,s3 +800018e4: 00148613 addi a2,s1,1 +800018e8: 000a8593 mv a1,s5 +800018ec: 00040513 mv a0,s0 +800018f0: f11ff0ef jal ra,80001800 +800018f4: 00050a13 mv s4,a0 +800018f8: f95ff06f j 8000188c + return NULL; +800018fc: 00000a13 li s4,0 +80001900: f8dff06f j 8000188c +80001904: 00000a13 li s4,0 +80001908: f85ff06f j 8000188c +8000190c: 00000a13 li s4,0 +80001910: f7dff06f j 8000188c + +80001914 : +void* find_equal_same_priority(pqueue_t *q, void *e, int pos) { +80001914: fe010113 addi sp,sp,-32 +80001918: 00112e23 sw ra,28(sp) +8000191c: 00812c23 sw s0,24(sp) +80001920: 00912a23 sw s1,20(sp) +80001924: 01212823 sw s2,16(sp) +80001928: 01312623 sw s3,12(sp) +8000192c: 01412423 sw s4,8(sp) +80001930: 01512223 sw s5,4(sp) +80001934: 01612023 sw s6,0(sp) + void* curr = q->d[pos]; +80001938: 02452783 lw a5,36(a0) +8000193c: 00261713 slli a4,a2,0x2 +80001940: 00e787b3 add a5,a5,a4 +80001944: 0007a483 lw s1,0(a5) + if (!q || pos >= q->size || !curr || q->cmppri(q->getpri(curr), q->getpri(e))) { +80001948: 0e050a63 beqz a0,80001a3c +8000194c: 00052783 lw a5,0(a0) +80001950: 0ef67a63 bleu a5,a2,80001a44 +80001954: 08048463 beqz s1,800019dc +80001958: 00060913 mv s2,a2 +8000195c: 00058993 mv s3,a1 +80001960: 00050413 mv s0,a0 +80001964: 00c52b03 lw s6,12(a0) +80001968: 01052783 lw a5,16(a0) +8000196c: 00048513 mv a0,s1 +80001970: 000780e7 jalr a5 +80001974: 00050a13 mv s4,a0 +80001978: 00058a93 mv s5,a1 +8000197c: 01042783 lw a5,16(s0) +80001980: 00098513 mv a0,s3 +80001984: 000780e7 jalr a5 +80001988: 00050613 mv a2,a0 +8000198c: 00058693 mv a3,a1 +80001990: 000a0513 mv a0,s4 +80001994: 000a8593 mv a1,s5 +80001998: 000b00e7 jalr s6 +8000199c: 0a051863 bnez a0,80001a4c + if (q->getpri(curr) == q->getpri(e) && q->eqelem(curr, e)) { +800019a0: 01042783 lw a5,16(s0) +800019a4: 00048513 mv a0,s1 +800019a8: 000780e7 jalr a5 +800019ac: 00050a13 mv s4,a0 +800019b0: 00058a93 mv s5,a1 +800019b4: 01042783 lw a5,16(s0) +800019b8: 00098513 mv a0,s3 +800019bc: 000780e7 jalr a5 +800019c0: 04aa1463 bne s4,a0,80001a08 +800019c4: 04ba9263 bne s5,a1,80001a08 +800019c8: 01c42783 lw a5,28(s0) +800019cc: 00098593 mv a1,s3 +800019d0: 00048513 mv a0,s1 +800019d4: 000780e7 jalr a5 +800019d8: 02050863 beqz a0,80001a08 +} +800019dc: 00048513 mv a0,s1 +800019e0: 01c12083 lw ra,28(sp) +800019e4: 01812403 lw s0,24(sp) +800019e8: 01412483 lw s1,20(sp) +800019ec: 01012903 lw s2,16(sp) +800019f0: 00c12983 lw s3,12(sp) +800019f4: 00812a03 lw s4,8(sp) +800019f8: 00412a83 lw s5,4(sp) +800019fc: 00012b03 lw s6,0(sp) +80001a00: 02010113 addi sp,sp,32 +80001a04: 00008067 ret + rval = find_equal_same_priority(q, e, left(pos)); +80001a08: 00191913 slli s2,s2,0x1 +80001a0c: 00090613 mv a2,s2 +80001a10: 00098593 mv a1,s3 +80001a14: 00040513 mv a0,s0 +80001a18: efdff0ef jal ra,80001914 +80001a1c: 00050493 mv s1,a0 + if (rval) +80001a20: fa051ee3 bnez a0,800019dc + return find_equal_same_priority(q, e, right(pos)); +80001a24: 00190613 addi a2,s2,1 +80001a28: 00098593 mv a1,s3 +80001a2c: 00040513 mv a0,s0 +80001a30: ee5ff0ef jal ra,80001914 +80001a34: 00050493 mv s1,a0 +80001a38: fa5ff06f j 800019dc + return NULL; +80001a3c: 00000493 li s1,0 +80001a40: f9dff06f j 800019dc +80001a44: 00000493 li s1,0 +80001a48: f95ff06f j 800019dc +80001a4c: 00000493 li s1,0 +80001a50: f8dff06f j 800019dc + +80001a54 : + pqueue_print_entry_f prt) { +80001a54: fd010113 addi sp,sp,-48 +80001a58: 02112623 sw ra,44(sp) +80001a5c: 02812423 sw s0,40(sp) +80001a60: 02912223 sw s1,36(sp) +80001a64: 03212023 sw s2,32(sp) +80001a68: 01312e23 sw s3,28(sp) +80001a6c: 01412c23 sw s4,24(sp) +80001a70: 01512a23 sw s5,20(sp) +80001a74: 01612823 sw s6,16(sp) +80001a78: 01712623 sw s7,12(sp) +80001a7c: 00050493 mv s1,a0 +80001a80: 00058b93 mv s7,a1 +80001a84: 00060b13 mv s6,a2 +80001a88: 00068a93 mv s5,a3 +80001a8c: 00070a13 mv s4,a4 +80001a90: 00078993 mv s3,a5 +80001a94: 00080913 mv s2,a6 + if (!(q = (pqueue_t*)malloc(sizeof(pqueue_t)))) +80001a98: 02800513 li a0,40 +80001a9c: 254050ef jal ra,80006cf0 +80001aa0: 00050413 mv s0,a0 +80001aa4: 04050063 beqz a0,80001ae4 + if (!(q->d = (void**)malloc((n + 1) * sizeof(void *)))) { +80001aa8: 00148493 addi s1,s1,1 +80001aac: 00249513 slli a0,s1,0x2 +80001ab0: 240050ef jal ra,80006cf0 +80001ab4: 02a42223 sw a0,36(s0) +80001ab8: 04050e63 beqz a0,80001b14 + q->size = 1; +80001abc: 00100793 li a5,1 +80001ac0: 00f42023 sw a5,0(s0) + q->avail = q->step = (n+1); /* see comment above about n+1 */ +80001ac4: 00942423 sw s1,8(s0) +80001ac8: 00942223 sw s1,4(s0) + q->cmppri = cmppri; +80001acc: 01742623 sw s7,12(s0) + q->getpri = getpri; +80001ad0: 01642823 sw s6,16(s0) + q->getpos = getpos; +80001ad4: 01542a23 sw s5,20(s0) + q->setpos = setpos; +80001ad8: 01442c23 sw s4,24(s0) + q->eqelem = eqelem; +80001adc: 01342e23 sw s3,28(s0) + q->prt = prt; +80001ae0: 03242023 sw s2,32(s0) +} +80001ae4: 00040513 mv a0,s0 +80001ae8: 02c12083 lw ra,44(sp) +80001aec: 02812403 lw s0,40(sp) +80001af0: 02412483 lw s1,36(sp) +80001af4: 02012903 lw s2,32(sp) +80001af8: 01c12983 lw s3,28(sp) +80001afc: 01812a03 lw s4,24(sp) +80001b00: 01412a83 lw s5,20(sp) +80001b04: 01012b03 lw s6,16(sp) +80001b08: 00c12b83 lw s7,12(sp) +80001b0c: 03010113 addi sp,sp,48 +80001b10: 00008067 ret + free(q); +80001b14: 00040513 mv a0,s0 +80001b18: 1e4050ef jal ra,80006cfc + return NULL; +80001b1c: 00000413 li s0,0 +80001b20: fc5ff06f j 80001ae4 + +80001b24 : +void pqueue_free(pqueue_t *q) { +80001b24: ff010113 addi sp,sp,-16 +80001b28: 00112623 sw ra,12(sp) +80001b2c: 00812423 sw s0,8(sp) +80001b30: 00050413 mv s0,a0 + free(q->d); +80001b34: 02452503 lw a0,36(a0) +80001b38: 1c4050ef jal ra,80006cfc + free(q); +80001b3c: 00040513 mv a0,s0 +80001b40: 1bc050ef jal ra,80006cfc +} +80001b44: 00c12083 lw ra,12(sp) +80001b48: 00812403 lw s0,8(sp) +80001b4c: 01010113 addi sp,sp,16 +80001b50: 00008067 ret + +80001b54 : + return (q->size - 1); +80001b54: 00052503 lw a0,0(a0) +} +80001b58: fff50513 addi a0,a0,-1 +80001b5c: 00008067 ret + +80001b60 : +void* pqueue_find_equal_same_priority(pqueue_t *q, void *e) { +80001b60: ff010113 addi sp,sp,-16 +80001b64: 00112623 sw ra,12(sp) + return find_equal_same_priority(q, e, 1); +80001b68: 00100613 li a2,1 +80001b6c: da9ff0ef jal ra,80001914 +} +80001b70: 00c12083 lw ra,12(sp) +80001b74: 01010113 addi sp,sp,16 +80001b78: 00008067 ret + +80001b7c : +void* pqueue_find_equal(pqueue_t *q, void *e, pqueue_pri_t max) { +80001b7c: ff010113 addi sp,sp,-16 +80001b80: 00112623 sw ra,12(sp) + return find_equal(q, e, 1, max); +80001b84: 00068713 mv a4,a3 +80001b88: 00060693 mv a3,a2 +80001b8c: 00100613 li a2,1 +80001b90: c71ff0ef jal ra,80001800 +} +80001b94: 00c12083 lw ra,12(sp) +80001b98: 01010113 addi sp,sp,16 +80001b9c: 00008067 ret + +80001ba0 : + if (!q) return 1; +80001ba0: 08050663 beqz a0,80001c2c +int pqueue_insert(pqueue_t *q, void *d) { +80001ba4: ff010113 addi sp,sp,-16 +80001ba8: 00112623 sw ra,12(sp) +80001bac: 00812423 sw s0,8(sp) +80001bb0: 00912223 sw s1,4(sp) +80001bb4: 01212023 sw s2,0(sp) +80001bb8: 00058913 mv s2,a1 +80001bbc: 00050413 mv s0,a0 + if (q->size >= q->avail) { +80001bc0: 00052783 lw a5,0(a0) +80001bc4: 00452703 lw a4,4(a0) +80001bc8: 02e7e263 bltu a5,a4,80001bec + newsize = q->size + q->step; +80001bcc: 00852483 lw s1,8(a0) +80001bd0: 009784b3 add s1,a5,s1 + if (!(tmp = (void**)realloc(q->d, sizeof(void *) * newsize))) +80001bd4: 00249593 slli a1,s1,0x2 +80001bd8: 02452503 lw a0,36(a0) +80001bdc: 778050ef jal ra,80007354 +80001be0: 04050a63 beqz a0,80001c34 + q->d = tmp; +80001be4: 02a42223 sw a0,36(s0) + q->avail = newsize; +80001be8: 00942223 sw s1,4(s0) + i = q->size++; +80001bec: 00042583 lw a1,0(s0) +80001bf0: 00158793 addi a5,a1,1 +80001bf4: 00f42023 sw a5,0(s0) + q->d[i] = d; +80001bf8: 02442783 lw a5,36(s0) +80001bfc: 00259713 slli a4,a1,0x2 +80001c00: 00e787b3 add a5,a5,a4 +80001c04: 0127a023 sw s2,0(a5) + bubble_up(q, i); +80001c08: 00040513 mv a0,s0 +80001c0c: d04ff0ef jal ra,80001110 + return 0; +80001c10: 00000513 li a0,0 +} +80001c14: 00c12083 lw ra,12(sp) +80001c18: 00812403 lw s0,8(sp) +80001c1c: 00412483 lw s1,4(sp) +80001c20: 00012903 lw s2,0(sp) +80001c24: 01010113 addi sp,sp,16 +80001c28: 00008067 ret + if (!q) return 1; +80001c2c: 00100513 li a0,1 +} +80001c30: 00008067 ret + return 1; +80001c34: 00100513 li a0,1 +80001c38: fddff06f j 80001c14 + +80001c3c : +int pqueue_remove(pqueue_t *q, void *d) { +80001c3c: fe010113 addi sp,sp,-32 +80001c40: 00112e23 sw ra,28(sp) +80001c44: 00812c23 sw s0,24(sp) +80001c48: 00912a23 sw s1,20(sp) +80001c4c: 01212823 sw s2,16(sp) +80001c50: 01312623 sw s3,12(sp) +80001c54: 01412423 sw s4,8(sp) +80001c58: 01512223 sw s5,4(sp) +80001c5c: 00050413 mv s0,a0 +80001c60: 00058913 mv s2,a1 + size_t posn = q->getpos(d); +80001c64: 01452783 lw a5,20(a0) +80001c68: 00058513 mv a0,a1 +80001c6c: 000780e7 jalr a5 +80001c70: 00050493 mv s1,a0 + q->d[posn] = q->d[--q->size]; +80001c74: 02442703 lw a4,36(s0) +80001c78: 00042783 lw a5,0(s0) +80001c7c: fff78793 addi a5,a5,-1 +80001c80: 00f42023 sw a5,0(s0) +80001c84: 00251a13 slli s4,a0,0x2 +80001c88: 014706b3 add a3,a4,s4 +80001c8c: 00279793 slli a5,a5,0x2 +80001c90: 00f707b3 add a5,a4,a5 +80001c94: 0007a783 lw a5,0(a5) +80001c98: 00f6a023 sw a5,0(a3) + if (q->cmppri(q->getpri(d), q->getpri(q->d[posn]))) +80001c9c: 00c42a83 lw s5,12(s0) +80001ca0: 01042783 lw a5,16(s0) +80001ca4: 00090513 mv a0,s2 +80001ca8: 000780e7 jalr a5 +80001cac: 00050913 mv s2,a0 +80001cb0: 00058993 mv s3,a1 +80001cb4: 01042703 lw a4,16(s0) +80001cb8: 02442783 lw a5,36(s0) +80001cbc: 014787b3 add a5,a5,s4 +80001cc0: 0007a503 lw a0,0(a5) +80001cc4: 000700e7 jalr a4 +80001cc8: 00050613 mv a2,a0 +80001ccc: 00058693 mv a3,a1 +80001cd0: 00090513 mv a0,s2 +80001cd4: 00098593 mv a1,s3 +80001cd8: 000a80e7 jalr s5 +80001cdc: 02051c63 bnez a0,80001d14 + percolate_down(q, posn); +80001ce0: 00048593 mv a1,s1 +80001ce4: 00040513 mv a0,s0 +80001ce8: d40ff0ef jal ra,80001228 +} +80001cec: 00000513 li a0,0 +80001cf0: 01c12083 lw ra,28(sp) +80001cf4: 01812403 lw s0,24(sp) +80001cf8: 01412483 lw s1,20(sp) +80001cfc: 01012903 lw s2,16(sp) +80001d00: 00c12983 lw s3,12(sp) +80001d04: 00812a03 lw s4,8(sp) +80001d08: 00412a83 lw s5,4(sp) +80001d0c: 02010113 addi sp,sp,32 +80001d10: 00008067 ret + bubble_up(q, posn); +80001d14: 00048593 mv a1,s1 +80001d18: 00040513 mv a0,s0 +80001d1c: bf4ff0ef jal ra,80001110 +80001d20: fcdff06f j 80001cec + +80001d24 : +void* pqueue_pop(pqueue_t *q) { +80001d24: ff010113 addi sp,sp,-16 +80001d28: 00112623 sw ra,12(sp) +80001d2c: 00812423 sw s0,8(sp) + if (!q || q->size == 1) +80001d30: 04050663 beqz a0,80001d7c +80001d34: 00052783 lw a5,0(a0) +80001d38: 00100713 li a4,1 +80001d3c: 04e78463 beq a5,a4,80001d84 + head = q->d[1]; +80001d40: 02452703 lw a4,36(a0) +80001d44: 00472403 lw s0,4(a4) + q->d[1] = q->d[--q->size]; +80001d48: fff78793 addi a5,a5,-1 +80001d4c: 00f52023 sw a5,0(a0) +80001d50: 00279793 slli a5,a5,0x2 +80001d54: 00f707b3 add a5,a4,a5 +80001d58: 0007a783 lw a5,0(a5) +80001d5c: 00f72223 sw a5,4(a4) + percolate_down(q, 1); +80001d60: 00100593 li a1,1 +80001d64: cc4ff0ef jal ra,80001228 +} +80001d68: 00040513 mv a0,s0 +80001d6c: 00c12083 lw ra,12(sp) +80001d70: 00812403 lw s0,8(sp) +80001d74: 01010113 addi sp,sp,16 +80001d78: 00008067 ret + return NULL; +80001d7c: 00000413 li s0,0 +80001d80: fe9ff06f j 80001d68 +80001d84: 00000413 li s0,0 +80001d88: fe1ff06f j 80001d68 + +80001d8c : + if (!q || q->size == 1) +80001d8c: 00050e63 beqz a0,80001da8 +80001d90: 00052703 lw a4,0(a0) +80001d94: 00100793 li a5,1 +80001d98: 00f70c63 beq a4,a5,80001db0 + d = q->d[1]; +80001d9c: 02452783 lw a5,36(a0) +80001da0: 0047a503 lw a0,4(a5) + return d; +80001da4: 00008067 ret + return NULL; +80001da8: 00000513 li a0,0 +80001dac: 00008067 ret +80001db0: 00000513 li a0,0 +} +80001db4: 00008067 ret + +80001db8 : + for (i = 1; i < q->size ;i++) { +80001db8: 00100793 li a5,1 +80001dbc: 0080006f j 80001dc4 +80001dc0: 00178793 addi a5,a5,1 +80001dc4: 00052703 lw a4,0(a0) +80001dc8: fee7ece3 bltu a5,a4,80001dc0 +} +80001dcc: 00008067 ret + +80001dd0 : +void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print) { +80001dd0: fe010113 addi sp,sp,-32 +80001dd4: 00112e23 sw ra,28(sp) +80001dd8: 00812c23 sw s0,24(sp) +80001ddc: 00912a23 sw s1,20(sp) +80001de0: 01212823 sw s2,16(sp) +80001de4: 01312623 sw s3,12(sp) +80001de8: 00050413 mv s0,a0 +80001dec: 00058993 mv s3,a1 +80001df0: 00060913 mv s2,a2 + dup = pqueue_init(q->size, +80001df4: 02052803 lw a6,32(a0) +80001df8: 01c52783 lw a5,28(a0) +80001dfc: 01852703 lw a4,24(a0) +80001e00: 01452683 lw a3,20(a0) +80001e04: 01052603 lw a2,16(a0) +80001e08: 00c52583 lw a1,12(a0) +80001e0c: 00052503 lw a0,0(a0) +80001e10: c45ff0ef jal ra,80001a54 +80001e14: 00050493 mv s1,a0 + dup->size = q->size; +80001e18: 00042783 lw a5,0(s0) +80001e1c: 00f52023 sw a5,0(a0) + dup->avail = q->avail; +80001e20: 00442783 lw a5,4(s0) +80001e24: 00f52223 sw a5,4(a0) + dup->step = q->step; +80001e28: 00842783 lw a5,8(s0) +80001e2c: 00f52423 sw a5,8(a0) + memcpy(dup->d, q->d, (q->size * sizeof(void *))); +80001e30: 00042603 lw a2,0(s0) +80001e34: 00261613 slli a2,a2,0x2 +80001e38: 02442583 lw a1,36(s0) +80001e3c: 02452503 lw a0,36(a0) +80001e40: 434030ef jal ra,80005274 + while ((e = pqueue_pop(dup))) +80001e44: 0100006f j 80001e54 + print(out, e); +80001e48: 00050593 mv a1,a0 +80001e4c: 00098513 mv a0,s3 +80001e50: 000900e7 jalr s2 + while ((e = pqueue_pop(dup))) +80001e54: 00048513 mv a0,s1 +80001e58: ecdff0ef jal ra,80001d24 +80001e5c: fe0516e3 bnez a0,80001e48 + pqueue_free(dup); +80001e60: 00048513 mv a0,s1 +80001e64: cc1ff0ef jal ra,80001b24 +} +80001e68: 01c12083 lw ra,28(sp) +80001e6c: 01812403 lw s0,24(sp) +80001e70: 01412483 lw s1,20(sp) +80001e74: 01012903 lw s2,16(sp) +80001e78: 00c12983 lw s3,12(sp) +80001e7c: 02010113 addi sp,sp,32 +80001e80: 00008067 ret + +80001e84 : + +int pqueue_is_valid(pqueue_t *q) { +80001e84: ff010113 addi sp,sp,-16 +80001e88: 00112623 sw ra,12(sp) + return subtree_is_valid(q, 1); +80001e8c: 00100593 li a1,1 +80001e90: cb8ff0ef jal ra,80001348 +} +80001e94: 00c12083 lw ra,12(sp) +80001e98: 01010113 addi sp,sp,16 +80001e9c: 00008067 ret + +80001ea0 <_lf_set_stop_tag>: +void _lf_set_stop_tag(tag_t tag) { +80001ea0: fd010113 addi sp,sp,-48 +80001ea4: 02112623 sw ra,44(sp) +80001ea8: 02812423 sw s0,40(sp) +80001eac: 00050413 mv s0,a0 + if (compare_tags(tag, stop_tag) < 0) { +80001eb0: 00052603 lw a2,0(a0) +80001eb4: 00452683 lw a3,4(a0) +80001eb8: 00852703 lw a4,8(a0) +80001ebc: 00c52783 lw a5,12(a0) +80001ec0: 00c12823 sw a2,16(sp) +80001ec4: 00d12a23 sw a3,20(sp) +80001ec8: 00e12c23 sw a4,24(sp) +80001ecc: 00f12e23 sw a5,28(sp) +80001ed0: 00007797 auipc a5,0x7 +80001ed4: b2078793 addi a5,a5,-1248 # 800089f0 +80001ed8: 0007a603 lw a2,0(a5) +80001edc: 0047a683 lw a3,4(a5) +80001ee0: 0087a703 lw a4,8(a5) +80001ee4: 00c7a783 lw a5,12(a5) +80001ee8: 00c12023 sw a2,0(sp) +80001eec: 00d12223 sw a3,4(sp) +80001ef0: 00e12423 sw a4,8(sp) +80001ef4: 00f12623 sw a5,12(sp) +80001ef8: 00010593 mv a1,sp +80001efc: 01010513 addi a0,sp,16 +80001f00: fb4ff0ef jal ra,800016b4 +80001f04: 00054a63 bltz a0,80001f18 <_lf_set_stop_tag+0x78> +} +80001f08: 02c12083 lw ra,44(sp) +80001f0c: 02812403 lw s0,40(sp) +80001f10: 03010113 addi sp,sp,48 +80001f14: 00008067 ret + stop_tag = tag; +80001f18: 00007797 auipc a5,0x7 +80001f1c: ad878793 addi a5,a5,-1320 # 800089f0 +80001f20: 00042583 lw a1,0(s0) +80001f24: 00442603 lw a2,4(s0) +80001f28: 00842683 lw a3,8(s0) +80001f2c: 00c42703 lw a4,12(s0) +80001f30: 00b7a023 sw a1,0(a5) +80001f34: 00c7a223 sw a2,4(a5) +80001f38: 00d7a423 sw a3,8(a5) +80001f3c: 00e7a623 sw a4,12(a5) +} +80001f40: fc9ff06f j 80001f08 <_lf_set_stop_tag+0x68> + +80001f44 : +} +80001f44: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f48: 0007a503 lw a0,0(a5) +80001f4c: 0047a583 lw a1,4(a5) +80001f50: 00008067 ret + +80001f54 : + if (offset > 0) { +80001f54: 00b05a63 blez a1,80001f68 + _lf_global_time_STP_offset = offset; +80001f58: 87818793 addi a5,gp,-1928 # 80009418 <_lf_global_time_STP_offset> +80001f5c: 00a7a023 sw a0,0(a5) +80001f60: 00b7a223 sw a1,4(a5) +} +80001f64: 00008067 ret + if (offset > 0) { +80001f68: fe059ee3 bnez a1,80001f64 +80001f6c: fe0516e3 bnez a0,80001f58 +80001f70: ff5ff06f j 80001f64 + +80001f74 : + if (time < 1000LL || time < 0LL) { +80001f74: 00b04a63 bgtz a1,80001f88 +80001f78: 00058463 beqz a1,80001f80 +80001f7c: 00008067 ret +80001f80: 3e700793 li a5,999 +80001f84: fea7fce3 bleu a0,a5,80001f7c +void print_time(instant_t time) { +80001f88: ff010113 addi sp,sp,-16 +80001f8c: 00112623 sw ra,12(sp) + print_time(time/1000LL); +80001f90: 3e800613 li a2,1000 +80001f94: 00000693 li a3,0 +80001f98: 2f1030ef jal ra,80005a88 <__divdi3> +80001f9c: fd9ff0ef jal ra,80001f74 +} +80001fa0: 00c12083 lw ra,12(sp) +80001fa4: 01010113 addi sp,sp,16 +80001fa8: 00008067 ret + +80001fac <__done_using>: + * was freed, and TOKEN_FREED if both the value and the token were + * freed. + */ +token_freed __done_using(lf_token_t* token) { + token_freed result = NOT_FREED; + if (token == NULL) return result; +80001fac: 0a050e63 beqz a0,80002068 <__done_using+0xbc> + if (token->ref_count == 0) { +80001fb0: 00c52783 lw a5,12(a0) +80001fb4: 00078663 beqz a5,80001fc0 <__done_using+0x14> + // fprintf(stderr, "WARNING: Token being freed that has already been freed: %p\n", token); + } else { + token->ref_count--; +80001fb8: fff78793 addi a5,a5,-1 +80001fbc: 00f52623 sw a5,12(a0) + } + DEBUG_PRINT("__done_using: ref_count = %d.", token->ref_count); + if (token->ref_count == 0) { +80001fc0: 00c52783 lw a5,12(a0) +80001fc4: 0a079663 bnez a5,80002070 <__done_using+0xc4> +token_freed __done_using(lf_token_t* token) { +80001fc8: ff010113 addi sp,sp,-16 +80001fcc: 00112623 sw ra,12(sp) +80001fd0: 00812423 sw s0,8(sp) +80001fd4: 00050413 mv s0,a0 + if (token->value != NULL) { +80001fd8: 00052503 lw a0,0(a0) +80001fdc: 02050c63 beqz a0,80002014 <__done_using+0x68> + // Count frees to issue a warning if this is never freed. + // Do not free the value field if it is garbage collected. + __count_payload_allocations--; +80001fe0: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80001fe4: 00072783 lw a5,0(a4) +80001fe8: fff78793 addi a5,a5,-1 +80001fec: 00f72023 sw a5,0(a4) + if(OK_TO_FREE != token_only) { + DEBUG_PRINT("__done_using: Freeing allocated memory for payload (token value): %p", token->value); + free(token->value); +80001ff0: 50d040ef jal ra,80006cfc + } + token->value = NULL; +80001ff4: 00042023 sw zero,0(s0) + result = VALUE_FREED; +80001ff8: 00100513 li a0,1 + } + // Tokens that are created at the start of execution and associated with + // output ports or actions are pointed to by those actions and output + // ports and should not be freed. They are expected to be reused instead. + if (token->ok_to_free) { +80001ffc: 01042783 lw a5,16(s0) +80002000: 00079e63 bnez a5,8000201c <__done_using+0x70> + DEBUG_PRINT("__done_using: Freeing allocated memory for token: %p", token); + result = TOKEN_FREED; + } + } + return result; +} +80002004: 00c12083 lw ra,12(sp) +80002008: 00812403 lw s0,8(sp) +8000200c: 01010113 addi sp,sp,16 +80002010: 00008067 ret + token_freed result = NOT_FREED; +80002014: 00000513 li a0,0 +80002018: fe5ff06f j 80001ffc <__done_using+0x50> + if (__token_recycling_bin_size < __TOKEN_RECYCLING_BIN_SIZE_LIMIT) { +8000201c: 85818793 addi a5,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002020: 0007a783 lw a5,0(a5) +80002024: 1ff00713 li a4,511 +80002028: 02f74a63 blt a4,a5,8000205c <__done_using+0xb0> + token->next_free = __token_recycling_bin; +8000202c: 85c18713 addi a4,gp,-1956 # 800093fc <__token_recycling_bin> +80002030: 00072683 lw a3,0(a4) +80002034: 00d42a23 sw a3,20(s0) + __token_recycling_bin = token; +80002038: 00872023 sw s0,0(a4) + __token_recycling_bin_size++; +8000203c: 00178793 addi a5,a5,1 +80002040: 84f1ac23 sw a5,-1960(gp) # 800093f8 <__token_recycling_bin_size> + __count_token_allocations--; +80002044: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +80002048: 00072783 lw a5,0(a4) +8000204c: fff78793 addi a5,a5,-1 +80002050: 00f72023 sw a5,0(a4) + result = TOKEN_FREED; +80002054: 00200513 li a0,2 +80002058: fadff06f j 80002004 <__done_using+0x58> + free(token); +8000205c: 00040513 mv a0,s0 +80002060: 49d040ef jal ra,80006cfc +80002064: fe1ff06f j 80002044 <__done_using+0x98> + if (token == NULL) return result; +80002068: 00000513 li a0,0 +8000206c: 00008067 ret + token_freed result = NOT_FREED; +80002070: 00000513 li a0,0 +} +80002074: 00008067 ret + +80002078 <__start_time_step>: + * Use tables to reset is_present fields to false, + * set intended_tag fields in federated execution + * to the current_tag, and decrement reference + * counts between time steps and at the end of execution. + */ +void __start_time_step() { +80002078: ff010113 addi sp,sp,-16 +8000207c: 00112623 sw ra,12(sp) +80002080: 00812423 sw s0,8(sp) + DEBUG_PRINT("--------- Start time step."); + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +80002084: 00000413 li s0,0 +80002088: 0200006f j 800020a8 <__start_time_step+0x30> + if (*(__tokens_with_ref_count[i].is_present)) { + if (__tokens_with_ref_count[i].reset_is_present) { + *(__tokens_with_ref_count[i].is_present) = false; + } + __done_using(*(__tokens_with_ref_count[i].token)); +8000208c: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +80002090: 0007a783 lw a5,0(a5) +80002094: 00e78733 add a4,a5,a4 +80002098: 00072783 lw a5,0(a4) +8000209c: 0007a503 lw a0,0(a5) +800020a0: f0dff0ef jal ra,80001fac <__done_using> + for(int i = 0; i < __tokens_with_ref_count_size; i++) { +800020a4: 00140413 addi s0,s0,1 +800020a8: 88018793 addi a5,gp,-1920 # 80009420 <__tokens_with_ref_count_size> +800020ac: 0007a783 lw a5,0(a5) +800020b0: 04f45263 ble a5,s0,800020f4 <__start_time_step+0x7c> + if (*(__tokens_with_ref_count[i].is_present)) { +800020b4: 00141793 slli a5,s0,0x1 +800020b8: 008787b3 add a5,a5,s0 +800020bc: 00279713 slli a4,a5,0x2 +800020c0: 88818793 addi a5,gp,-1912 # 80009428 <__tokens_with_ref_count> +800020c4: 0007a783 lw a5,0(a5) +800020c8: 00e787b3 add a5,a5,a4 +800020cc: 0047a683 lw a3,4(a5) +800020d0: 0006c603 lbu a2,0(a3) +800020d4: fc0608e3 beqz a2,800020a4 <__start_time_step+0x2c> + if (__tokens_with_ref_count[i].reset_is_present) { +800020d8: 0087c783 lbu a5,8(a5) +800020dc: fa0788e3 beqz a5,8000208c <__start_time_step+0x14> + *(__tokens_with_ref_count[i].is_present) = false; +800020e0: 00068023 sb zero,0(a3) +800020e4: fa9ff06f j 8000208c <__start_time_step+0x14> + } + } + // Also handle dynamically created tokens for mutable inputs. + while (_lf_more_tokens_with_ref_count != NULL) { + lf_token_t* next = _lf_more_tokens_with_ref_count->next_free; +800020e8: 01452403 lw s0,20(a0) + __done_using(_lf_more_tokens_with_ref_count); +800020ec: ec1ff0ef jal ra,80001fac <__done_using> + _lf_more_tokens_with_ref_count = next; +800020f0: 8881a223 sw s0,-1916(gp) # 80009424 <_lf_more_tokens_with_ref_count> + while (_lf_more_tokens_with_ref_count != NULL) { +800020f4: 88418793 addi a5,gp,-1916 # 80009424 <_lf_more_tokens_with_ref_count> +800020f8: 0007a503 lw a0,0(a5) +800020fc: fe0516e3 bnez a0,800020e8 <__start_time_step+0x70> + } + for(int i = 0; i < __is_present_fields_size; i++) { +80002100: 00000793 li a5,0 +80002104: 0200006f j 80002124 <__start_time_step+0xac> + *__is_present_fields[i] = false; +80002108: 89818713 addi a4,gp,-1896 # 80009438 <__is_present_fields> +8000210c: 00072703 lw a4,0(a4) +80002110: 00279693 slli a3,a5,0x2 +80002114: 00d70733 add a4,a4,a3 +80002118: 00072703 lw a4,0(a4) +8000211c: 00070023 sb zero,0(a4) + for(int i = 0; i < __is_present_fields_size; i++) { +80002120: 00178793 addi a5,a5,1 +80002124: 89418713 addi a4,gp,-1900 # 80009434 <__is_present_fields_size> +80002128: 00072703 lw a4,0(a4) +8000212c: fce7cee3 blt a5,a4,80002108 <__start_time_step+0x90> + // FIXME: For now, an intended tag of (NEVER, 0) + // indicates that it has never been set. + *__intended_tag_fields[i] = (tag_t) {NEVER, 0}; +#endif + } +} +80002130: 00c12083 lw ra,12(sp) +80002134: 00812403 lw s0,8(sp) +80002138: 01010113 addi sp,sp,16 +8000213c: 00008067 ret + +80002140 <__create_token>: + * to initialize actions with tokens. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* __create_token(size_t element_size) { +80002140: ff010113 addi sp,sp,-16 +80002144: 00112623 sw ra,12(sp) +80002148: 00812423 sw s0,8(sp) +8000214c: 00050413 mv s0,a0 + lf_token_t* token; + // Check the recycling bin. + if (__token_recycling_bin != NULL) { +80002150: 85c18793 addi a5,gp,-1956 # 800093fc <__token_recycling_bin> +80002154: 0007a503 lw a0,0(a5) +80002158: 04050263 beqz a0,8000219c <__create_token+0x5c> + token = __token_recycling_bin; + __token_recycling_bin = token->next_free; +8000215c: 01452783 lw a5,20(a0) +80002160: 84f1ae23 sw a5,-1956(gp) # 800093fc <__token_recycling_bin> + __token_recycling_bin_size--; +80002164: 85818713 addi a4,gp,-1960 # 800093f8 <__token_recycling_bin_size> +80002168: 00072783 lw a5,0(a4) +8000216c: fff78793 addi a5,a5,-1 +80002170: 00f72023 sw a5,0(a4) + DEBUG_PRINT("__create_token: Retrieved token from the recycling bin: %p", token); + } else { + token = (lf_token_t*)malloc(sizeof(lf_token_t)); + DEBUG_PRINT("__create_token: Allocated memory for token: %p", token); + } + token->value = NULL; +80002174: 00052023 sw zero,0(a0) + token->length = 0; +80002178: 00052423 sw zero,8(a0) + token->element_size = element_size; +8000217c: 00852223 sw s0,4(a0) + token->ref_count = 0; +80002180: 00052623 sw zero,12(a0) + token->ok_to_free = no; +80002184: 00052823 sw zero,16(a0) + token->next_free = NULL; +80002188: 00052a23 sw zero,20(a0) + return token; +} +8000218c: 00c12083 lw ra,12(sp) +80002190: 00812403 lw s0,8(sp) +80002194: 01010113 addi sp,sp,16 +80002198: 00008067 ret + token = (lf_token_t*)malloc(sizeof(lf_token_t)); +8000219c: 01800513 li a0,24 +800021a0: 351040ef jal ra,80006cf0 +800021a4: fd1ff06f j 80002174 <__create_token+0x34> + +800021a8 : + * The value pointer will be NULL and the length will be 0. + * @param element_size The size of an element carried in the payload or + * 0 if there is no payload. + * @return A new or recycled lf_token_t struct. + */ +lf_token_t* create_token(size_t element_size) { +800021a8: ff010113 addi sp,sp,-16 +800021ac: 00112623 sw ra,12(sp) + DEBUG_PRINT("create_token: element_size: %zu", element_size); + __count_token_allocations++; +800021b0: 86018713 addi a4,gp,-1952 # 80009400 <__count_token_allocations> +800021b4: 00072783 lw a5,0(a4) +800021b8: 00178793 addi a5,a5,1 +800021bc: 00f72023 sw a5,0(a4) + lf_token_t* result = __create_token(element_size); +800021c0: f81ff0ef jal ra,80002140 <__create_token> + result->ok_to_free = OK_TO_FREE; +800021c4: 00100793 li a5,1 +800021c8: 00f52823 sw a5,16(a0) + return result; +} +800021cc: 00c12083 lw ra,12(sp) +800021d0: 01010113 addi sp,sp,16 +800021d4: 00008067 ret + +800021d8 <__initialize_token_with_value>: + * @param value The value of the array. + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token_with_value(lf_token_t* token, void* value, int length) { +800021d8: ff010113 addi sp,sp,-16 +800021dc: 00112623 sw ra,12(sp) +800021e0: 00812423 sw s0,8(sp) +800021e4: 00912223 sw s1,4(sp) +800021e8: 00058493 mv s1,a1 +800021ec: 00060413 mv s0,a2 + + // If necessary, allocate memory for a new lf_token_t struct. + // This assumes that the lf_token_t* in the self struct has been initialized to NULL. + lf_token_t* result = token; + DEBUG_PRINT("Initializing a token %p with ref_count %d.", token, token->ref_count); + if (token == NULL || token->ref_count > 0) { +800021f0: 00050663 beqz a0,800021fc <__initialize_token_with_value+0x24> +800021f4: 00c52783 lw a5,12(a0) +800021f8: 00f05663 blez a5,80002204 <__initialize_token_with_value+0x2c> + // The specified token is not available. + result = create_token(token->element_size); +800021fc: 00452503 lw a0,4(a0) +80002200: fa9ff0ef jal ra,800021a8 + } + result->value = value; +80002204: 00952023 sw s1,0(a0) + result->length = length; +80002208: 00852423 sw s0,8(a0) + return result; +} +8000220c: 00c12083 lw ra,12(sp) +80002210: 00812403 lw s0,8(sp) +80002214: 00412483 lw s1,4(sp) +80002218: 01010113 addi sp,sp,16 +8000221c: 00008067 ret + +80002220 : +80002220: ff010113 addi sp,sp,-16 +80002224: 00112623 sw ra,12(sp) +80002228: 00812423 sw s0,8(sp) +8000222c: 00912223 sw s1,4(sp) +80002230: 00050413 mv s0,a0 +80002234: 01c52483 lw s1,28(a0) +80002238: 149a07b7 lui a5,0x149a0 +8000223c: 00578793 addi a5,a5,5 # 149a0005 +80002240: 0effe717 auipc a4,0xeffe +80002244: dcf72023 sw a5,-576(a4) # 8f000000 +80002248: 00800513 li a0,8 +8000224c: 2a5040ef jal ra,80006cf0 +80002250: 00100793 li a5,1 +80002254: 04f40023 sb a5,64(s0) +80002258: 00200613 li a2,2 +8000225c: 00050593 mv a1,a0 +80002260: 04842503 lw a0,72(s0) +80002264: f75ff0ef jal ra,800021d8 <__initialize_token_with_value> +80002268: 04442783 lw a5,68(s0) +8000226c: 00f52623 sw a5,12(a0) +80002270: 04a42423 sw a0,72(s0) +80002274: 00052703 lw a4,0(a0) +80002278: 02e42e23 sw a4,60(s0) +8000227c: 00442783 lw a5,4(s0) +80002280: 00100693 li a3,1 +80002284: 08d78c63 beq a5,a3,8000231c +80002288: 04f6dc63 ble a5,a3,800022e0 +8000228c: 00200693 li a3,2 +80002290: 0cd78e63 beq a5,a3,8000236c +80002294: 00300693 li a3,3 +80002298: 06d79063 bne a5,a3,800022f8 +8000229c: 01442783 lw a5,20(s0) +800022a0: 00178793 addi a5,a5,1 +800022a4: 00f42a23 sw a5,20(s0) +800022a8: 00842783 lw a5,8(s0) +800022ac: 40f007b3 neg a5,a5 +800022b0: 00f72023 sw a5,0(a4) +800022b4: 00842783 lw a5,8(s0) +800022b8: 03c42703 lw a4,60(s0) +800022bc: 40f007b3 neg a5,a5 +800022c0: 00f72223 sw a5,4(a4) +800022c4: 01442703 lw a4,20(s0) +800022c8: 00900793 li a5,9 +800022cc: 02e7d663 ble a4,a5,800022f8 +800022d0: 00042a23 sw zero,20(s0) +800022d4: 00200793 li a5,2 +800022d8: 00f42223 sw a5,4(s0) +800022dc: 01c0006f j 800022f8 +800022e0: 00079c63 bnez a5,800022f8 +800022e4: 00c42783 lw a5,12(s0) +800022e8: 00f72023 sw a5,0(a4) +800022ec: 03c42783 lw a5,60(s0) +800022f0: 00c42703 lw a4,12(s0) +800022f4: 00e7a223 sw a4,4(a5) +800022f8: 249a07b7 lui a5,0x249a0 +800022fc: 00578793 addi a5,a5,5 # 249a0005 +80002300: 0effe717 auipc a4,0xeffe +80002304: d0f72023 sw a5,-768(a4) # 8f000000 +80002308: 00c12083 lw ra,12(sp) +8000230c: 00812403 lw s0,8(sp) +80002310: 00412483 lw s1,4(sp) +80002314: 01010113 addi sp,sp,16 +80002318: 00008067 ret +8000231c: 0004c783 lbu a5,0(s1) +80002320: 04079063 bnez a5,80002360 +80002324: 01042783 lw a5,16(s0) +80002328: 00178793 addi a5,a5,1 +8000232c: 00f42823 sw a5,16(s0) +80002330: 00842783 lw a5,8(s0) +80002334: 00f72023 sw a5,0(a4) +80002338: 03c42783 lw a5,60(s0) +8000233c: 00842703 lw a4,8(s0) +80002340: 00e7a223 sw a4,4(a5) +80002344: 01042703 lw a4,16(s0) +80002348: 01400793 li a5,20 +8000234c: fae7d6e3 ble a4,a5,800022f8 +80002350: 00042823 sw zero,16(s0) +80002354: 00200793 li a5,2 +80002358: 00f42223 sw a5,4(s0) +8000235c: f9dff06f j 800022f8 +80002360: 00300793 li a5,3 +80002364: 00f42223 sw a5,4(s0) +80002368: f91ff06f j 800022f8 +8000236c: 0004c783 lbu a5,0(s1) +80002370: 04079263 bnez a5,800023b4 +80002374: 01842783 lw a5,24(s0) +80002378: 00178793 addi a5,a5,1 +8000237c: 00f42c23 sw a5,24(s0) +80002380: 00842783 lw a5,8(s0) +80002384: 00f72023 sw a5,0(a4) +80002388: 00842783 lw a5,8(s0) +8000238c: 03c42703 lw a4,60(s0) +80002390: 40f007b3 neg a5,a5 +80002394: 00f72223 sw a5,4(a4) +80002398: 01842703 lw a4,24(s0) +8000239c: 00a00793 li a5,10 +800023a0: f4e7dce3 ble a4,a5,800022f8 +800023a4: 00042c23 sw zero,24(s0) +800023a8: 00100793 li a5,1 +800023ac: 00f42223 sw a5,4(s0) +800023b0: f49ff06f j 800022f8 +800023b4: 00300793 li a5,3 +800023b8: 00f42223 sw a5,4(s0) +800023bc: f3dff06f j 800022f8 + +800023c0 <__initialize_token>: + * @param token The token to populate, if it is available (must not be NULL). + * @param length The length of the array, or 1 if it is not an array. + * @return Either the specified token or a new one, in each case with a value + * field pointing to newly allocated memory. + */ +lf_token_t* __initialize_token(lf_token_t* token, int length) { +800023c0: ff010113 addi sp,sp,-16 +800023c4: 00112623 sw ra,12(sp) +800023c8: 00812423 sw s0,8(sp) +800023cc: 00912223 sw s1,4(sp) +800023d0: 00050413 mv s0,a0 +800023d4: 00058493 mv s1,a1 + // assert(token != NULL); + + // Allocate memory for storing the array. + void* value = malloc(token->element_size * length); +800023d8: 00452503 lw a0,4(a0) +800023dc: 02a58533 mul a0,a1,a0 +800023e0: 111040ef jal ra,80006cf0 + // Count allocations to issue a warning if this is never freed. + __count_payload_allocations++; +800023e4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +800023e8: 00072783 lw a5,0(a4) +800023ec: 00178793 addi a5,a5,1 +800023f0: 00f72023 sw a5,0(a4) + return __initialize_token_with_value(token, value, length); +800023f4: 00048613 mv a2,s1 +800023f8: 00050593 mv a1,a0 +800023fc: 00040513 mv a0,s0 +80002400: dd9ff0ef jal ra,800021d8 <__initialize_token_with_value> +} +80002404: 00c12083 lw ra,12(sp) +80002408: 00812403 lw s0,8(sp) +8000240c: 00412483 lw s1,4(sp) +80002410: 01010113 addi sp,sp,16 +80002414: 00008067 ret + +80002418 <_lf_is_tag_after_stop_tag>: +/** + * A helper function that returns true if the provided tag is after stop tag. + * + * @param tag The tag to check against stop tag + */ +bool _lf_is_tag_after_stop_tag(tag_t tag) { +80002418: fd010113 addi sp,sp,-48 +8000241c: 02112623 sw ra,44(sp) + if (compare_tags(tag, stop_tag) > 0) { +80002420: 00052603 lw a2,0(a0) +80002424: 00452683 lw a3,4(a0) +80002428: 00852703 lw a4,8(a0) +8000242c: 00c52783 lw a5,12(a0) +80002430: 00c12823 sw a2,16(sp) +80002434: 00d12a23 sw a3,20(sp) +80002438: 00e12c23 sw a4,24(sp) +8000243c: 00f12e23 sw a5,28(sp) +80002440: 00006797 auipc a5,0x6 +80002444: 5b078793 addi a5,a5,1456 # 800089f0 +80002448: 0007a603 lw a2,0(a5) +8000244c: 0047a683 lw a3,4(a5) +80002450: 0087a703 lw a4,8(a5) +80002454: 00c7a783 lw a5,12(a5) +80002458: 00c12023 sw a2,0(sp) +8000245c: 00d12223 sw a3,4(sp) +80002460: 00e12423 sw a4,8(sp) +80002464: 00f12623 sw a5,12(sp) +80002468: 00010593 mv a1,sp +8000246c: 01010513 addi a0,sp,16 +80002470: a44ff0ef jal ra,800016b4 +80002474: 00a05a63 blez a0,80002488 <_lf_is_tag_after_stop_tag+0x70> + return true; +80002478: 00100513 li a0,1 + } + return false; +} +8000247c: 02c12083 lw ra,44(sp) +80002480: 03010113 addi sp,sp,48 +80002484: 00008067 ret + return false; +80002488: 00000513 li a0,0 +8000248c: ff1ff06f j 8000247c <_lf_is_tag_after_stop_tag+0x64> + +80002490 <_lf_get_new_event>: + +/** + * Get a new event. If there is a recycled event available, use that. + * If not, allocate a new one. In either case, all fields will be zero'ed out. + */ +event_t* _lf_get_new_event() { +80002490: ff010113 addi sp,sp,-16 +80002494: 00112623 sw ra,12(sp) + // Recycle event_t structs, if possible. + event_t* e = (event_t*)pqueue_pop(recycle_q); +80002498: 86c18793 addi a5,gp,-1940 # 8000940c +8000249c: 0007a503 lw a0,0(a5) +800024a0: 885ff0ef jal ra,80001d24 + if (e == NULL) { +800024a4: 00050863 beqz a0,800024b4 <_lf_get_new_event+0x24> + e = (event_t*)calloc(1, sizeof(struct event_t)); + } + return e; +} +800024a8: 00c12083 lw ra,12(sp) +800024ac: 01010113 addi sp,sp,16 +800024b0: 00008067 ret + e = (event_t*)calloc(1, sizeof(struct event_t)); +800024b4: 02000593 li a1,32 +800024b8: 00100513 li a0,1 +800024bc: 788040ef jal ra,80006c44 + return e; +800024c0: fe9ff06f j 800024a8 <_lf_get_new_event+0x18> + +800024c4 <_lf_recycle_event>: + +/** + * Recycle the given event. + * Zero it out and pushed it onto the recycle queue. + */ +void _lf_recycle_event(event_t* e) { +800024c4: ff010113 addi sp,sp,-16 +800024c8: 00112623 sw ra,12(sp) +800024cc: 00050593 mv a1,a0 + e->time = 0LL; +800024d0: 00000793 li a5,0 +800024d4: 00000813 li a6,0 +800024d8: 00f52023 sw a5,0(a0) +800024dc: 01052223 sw a6,4(a0) + e->trigger = NULL; +800024e0: 00052423 sw zero,8(a0) + e->pos = 0; +800024e4: 00052623 sw zero,12(a0) + e->token = NULL; +800024e8: 00052823 sw zero,16(a0) + e->is_dummy = false; +800024ec: 00050a23 sb zero,20(a0) +#ifdef _LF_COORD_DECENTRALIZED + e->intended_tag = (tag_t) { .time = 0LL, .microstep = 0u}; +#endif + e->next = NULL; +800024f0: 00052c23 sw zero,24(a0) + pqueue_insert(recycle_q, e); +800024f4: 86c18793 addi a5,gp,-1940 # 8000940c +800024f8: 0007a503 lw a0,0(a5) +800024fc: ea4ff0ef jal ra,80001ba0 +} +80002500: 00c12083 lw ra,12(sp) +80002504: 01010113 addi sp,sp,16 +80002508: 00008067 ret + +8000250c <_lf_create_dummy_events>: + * @param time The logical time of that event. + * @param next The event to place after the dummy events. + * @param offset The number of dummy events to insert. + * @return A pointer to the first dummy event. + */ +event_t* _lf_create_dummy_events(trigger_t* trigger, instant_t time, event_t* next, microstep_t offset) { +8000250c: fe010113 addi sp,sp,-32 +80002510: 00112e23 sw ra,28(sp) +80002514: 00812c23 sw s0,24(sp) +80002518: 00912a23 sw s1,20(sp) +8000251c: 01212823 sw s2,16(sp) +80002520: 01312623 sw s3,12(sp) +80002524: 01412423 sw s4,8(sp) +80002528: 01512223 sw s5,4(sp) +8000252c: 01612023 sw s6,0(sp) +80002530: 00050a13 mv s4,a0 +80002534: 00058913 mv s2,a1 +80002538: 00060993 mv s3,a2 +8000253c: 00068b13 mv s6,a3 +80002540: 00070493 mv s1,a4 + event_t* first_dummy = _lf_get_new_event(); +80002544: f4dff0ef jal ra,80002490 <_lf_get_new_event> +80002548: 00050a93 mv s5,a0 + event_t* dummy = first_dummy; +8000254c: 00050413 mv s0,a0 + while (offset > 0) { +80002550: 02048c63 beqz s1,80002588 <_lf_create_dummy_events+0x7c> + dummy->time = time; +80002554: 01242023 sw s2,0(s0) +80002558: 01342223 sw s3,4(s0) + dummy->trigger = trigger; +8000255c: 01442423 sw s4,8(s0) + dummy->is_dummy = true; +80002560: 00100793 li a5,1 +80002564: 00f40a23 sb a5,20(s0) + if (offset == 1) { +80002568: 00100793 li a5,1 +8000256c: 00f48c63 beq s1,a5,80002584 <_lf_create_dummy_events+0x78> + dummy->next = next; + break; + } + dummy->next = _lf_get_new_event(); +80002570: f21ff0ef jal ra,80002490 <_lf_get_new_event> +80002574: 00a42c23 sw a0,24(s0) + dummy = dummy->next; + offset--; +80002578: fff48493 addi s1,s1,-1 + dummy = dummy->next; +8000257c: 00050413 mv s0,a0 +80002580: fd1ff06f j 80002550 <_lf_create_dummy_events+0x44> + dummy->next = next; +80002584: 01642c23 sw s6,24(s0) + } + return first_dummy; +} +80002588: 000a8513 mv a0,s5 +8000258c: 01c12083 lw ra,28(sp) +80002590: 01812403 lw s0,24(sp) +80002594: 01412483 lw s1,20(sp) +80002598: 01012903 lw s2,16(sp) +8000259c: 00c12983 lw s3,12(sp) +800025a0: 00812a03 lw s4,8(sp) +800025a4: 00412a83 lw s5,4(sp) +800025a8: 00012b03 lw s6,0(sp) +800025ac: 02010113 addi sp,sp,32 +800025b0: 00008067 ret + +800025b4 <_lf_replace_token>: + * Replace the token on the specified event with the specified + * token and free the old token. + * @param event The event. + * @param token The token. + */ +void _lf_replace_token(event_t* event, lf_token_t* token) { +800025b4: ff010113 addi sp,sp,-16 +800025b8: 00112623 sw ra,12(sp) +800025bc: 00812423 sw s0,8(sp) +800025c0: 00912223 sw s1,4(sp) +800025c4: 00050413 mv s0,a0 +800025c8: 00058493 mv s1,a1 + if (event->token != token) { +800025cc: 01052503 lw a0,16(a0) +800025d0: 00b50463 beq a0,a1,800025d8 <_lf_replace_token+0x24> + // Free the existing token, if any + __done_using(event->token); +800025d4: 9d9ff0ef jal ra,80001fac <__done_using> + } + // Replace the token with ours. + event->token = token; +800025d8: 00942823 sw s1,16(s0) +} +800025dc: 00c12083 lw ra,12(sp) +800025e0: 00812403 lw s0,8(sp) +800025e4: 00412483 lw s1,4(sp) +800025e8: 01010113 addi sp,sp,16 +800025ec: 00008067 ret + +800025f0 <_lf_schedule_at_tag>: + * @param token The token wrapping the payload or NULL for no payload. + * + * @return 1 for success, 0 if no new event was scheduled (instead, the payload was updated), + * or -1 for error (the tag is equal to or less than the current tag). + */ +int _lf_schedule_at_tag(trigger_t* trigger, tag_t tag, lf_token_t* token) { +800025f0: f9010113 addi sp,sp,-112 +800025f4: 06112623 sw ra,108(sp) +800025f8: 06812423 sw s0,104(sp) +800025fc: 06912223 sw s1,100(sp) +80002600: 07212023 sw s2,96(sp) +80002604: 05312e23 sw s3,92(sp) +80002608: 05412c23 sw s4,88(sp) +8000260c: 05512a23 sw s5,84(sp) +80002610: 05612823 sw s6,80(sp) +80002614: 00050a93 mv s5,a0 +80002618: 00058413 mv s0,a1 +8000261c: 00060993 mv s3,a2 + + tag_t current_logical_tag = get_current_tag(); +80002620: 02010513 addi a0,sp,32 +80002624: 964ff0ef jal ra,80001788 + + // printf("_lf_schedule_at_tag() called with tag (%lld, %u) at tag (%lld, %u).\n", + // tag.time - start_time, tag.microstep, + // current_logical_tag.time - start_time, current_logical_tag.microstep); + if (compare_tags(tag, current_logical_tag) <= 0) { +80002628: 00042603 lw a2,0(s0) +8000262c: 00442683 lw a3,4(s0) +80002630: 00842703 lw a4,8(s0) +80002634: 00c42783 lw a5,12(s0) +80002638: 00c12823 sw a2,16(sp) +8000263c: 00d12a23 sw a3,20(sp) +80002640: 00e12c23 sw a4,24(sp) +80002644: 00f12e23 sw a5,28(sp) +80002648: 02012783 lw a5,32(sp) +8000264c: 00f12023 sw a5,0(sp) +80002650: 02412783 lw a5,36(sp) +80002654: 00f12223 sw a5,4(sp) +80002658: 02812783 lw a5,40(sp) +8000265c: 00f12423 sw a5,8(sp) +80002660: 02c12783 lw a5,44(sp) +80002664: 00f12623 sw a5,12(sp) +80002668: 00010593 mv a1,sp +8000266c: 01010513 addi a0,sp,16 +80002670: 844ff0ef jal ra,800016b4 +80002674: 30a05e63 blez a0,80002990 <_lf_schedule_at_tag+0x3a0> + // fprintf(stderr,"_lf_schedule_at_tag(): requested to schedule an event in the past.\n"); + return -1; + } + + // Increment the reference count of the token. + if (token != NULL) { +80002678: 00098863 beqz s3,80002688 <_lf_schedule_at_tag+0x98> + token->ref_count++; +8000267c: 00c9a783 lw a5,12(s3) +80002680: 00178793 addi a5,a5,1 +80002684: 00f9a623 sw a5,12(s3) + } + + // Do not schedule events if the tag is after the stop tag + if (_lf_is_tag_after_stop_tag(tag)) { +80002688: 00042603 lw a2,0(s0) +8000268c: 00442683 lw a3,4(s0) +80002690: 00842703 lw a4,8(s0) +80002694: 00c42783 lw a5,12(s0) +80002698: 00c12023 sw a2,0(sp) +8000269c: 00d12223 sw a3,4(sp) +800026a0: 00e12423 sw a4,8(sp) +800026a4: 00f12623 sw a5,12(sp) +800026a8: 00010513 mv a0,sp +800026ac: d6dff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800026b0: 0a051663 bnez a0,8000275c <_lf_schedule_at_tag+0x16c> + DEBUG_PRINT("_lf_schedule_at_tag: event time is past the timeout. Discarding event."); + __done_using(token); + return -1; + } + + event_t* e = _lf_get_new_event(); +800026b4: dddff0ef jal ra,80002490 <_lf_get_new_event> +800026b8: 00050913 mv s2,a0 + // Set the event time + e->time = tag.time; +800026bc: 00042a03 lw s4,0(s0) +800026c0: 00442b03 lw s6,4(s0) +800026c4: 01452023 sw s4,0(a0) +800026c8: 01652223 sw s6,4(a0) + + tracepoint_schedule(trigger, tag.time - current_logical_tag.time); + + // Make sure the event points to this trigger so when it is + // dequeued, it will trigger this trigger. + e->trigger = trigger; +800026cc: 01552423 sw s5,8(a0) + + // Set the payload. + e->token = token; +800026d0: 01352823 sw s3,16(a0) +#ifdef _LF_COORD_DECENTRALIZED + // Set the intended tag + e->intended_tag = trigger->intended_tag; +#endif + + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +800026d4: 00050593 mv a1,a0 +800026d8: 87418793 addi a5,gp,-1932 # 80009414 +800026dc: 0007a503 lw a0,0(a5) +800026e0: c80ff0ef jal ra,80001b60 +800026e4: 00050493 mv s1,a0 + if (found != NULL) { +800026e8: 20050063 beqz a0,800028e8 <_lf_schedule_at_tag+0x2f8> + if (tag.microstep == 0) { +800026ec: 00842683 lw a3,8(s0) +800026f0: 0c069263 bnez a3,800027b4 <_lf_schedule_at_tag+0x1c4> + // The microstep is 0, which means that the event is being scheduled + // at a future time and at the beginning of the skip list of events + // at that time. + // In case the event is a dummy event + // convert it to a real event. + found->is_dummy = false; +800026f4: 00050a23 sb zero,20(a0) + switch (trigger->policy) { +800026f8: 02caa783 lw a5,44(s5) +800026fc: 00100713 li a4,1 +80002700: 06e78663 beq a5,a4,8000276c <_lf_schedule_at_tag+0x17c> +80002704: 00200713 li a4,2 +80002708: 08e78263 beq a5,a4,8000278c <_lf_schedule_at_tag+0x19c> + return 0; + break; + default: + // Adding a microstep to the original + // intended tag. + if (_lf_is_tag_after_stop_tag((tag_t) {.time=found->time,.microstep=1})) { +8000270c: 00052703 lw a4,0(a0) +80002710: 00452783 lw a5,4(a0) +80002714: 02e12823 sw a4,48(sp) +80002718: 02f12a23 sw a5,52(sp) +8000271c: 00100793 li a5,1 +80002720: 02f12c23 sw a5,56(sp) +80002724: 00e12023 sw a4,0(sp) +80002728: 03412703 lw a4,52(sp) +8000272c: 00e12223 sw a4,4(sp) +80002730: 00f12423 sw a5,8(sp) +80002734: 03c12783 lw a5,60(sp) +80002738: 00f12623 sw a5,12(sp) +8000273c: 00010513 mv a0,sp +80002740: cd9ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002744: 06051063 bnez a0,800027a4 <_lf_schedule_at_tag+0x1b4> + // Scheduling e will incur a microstep after the stop tag, + // which is illegal. + _lf_recycle_event(e); + return 0; + } + if (found->next != NULL) { +80002748: 0184a783 lw a5,24(s1) +8000274c: 24079663 bnez a5,80002998 <_lf_schedule_at_tag+0x3a8> + // fprintf(stderr, "_lf_schedule_at_tag: in-order contract violated.\n"); + return -1; + } + found->next = e; +80002750: 0124ac23 sw s2,24(s1) + // Create a dummy event. Insert it into the queue, and let its next + // pointer point to the actual event. + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); + } + } + return 1; +80002754: 00100513 li a0,1 +80002758: 1c00006f j 80002918 <_lf_schedule_at_tag+0x328> + __done_using(token); +8000275c: 00098513 mv a0,s3 +80002760: 84dff0ef jal ra,80001fac <__done_using> + return -1; +80002764: fff00513 li a0,-1 +80002768: 1b00006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->token != token) { +8000276c: 01052783 lw a5,16(a0) +80002770: 01378663 beq a5,s3,8000277c <_lf_schedule_at_tag+0x18c> + __done_using(token); +80002774: 00098513 mv a0,s3 +80002778: 835ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +8000277c: 00090513 mv a0,s2 +80002780: d45ff0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80002784: 00000513 li a0,0 +80002788: 1900006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found, token); +8000278c: 00098593 mv a1,s3 +80002790: e25ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80002794: 00090513 mv a0,s2 +80002798: d2dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +8000279c: 00000513 li a0,0 +800027a0: 1780006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800027a4: 00090513 mv a0,s2 +800027a8: d1dff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800027ac: 00000513 li a0,0 +800027b0: 1680006f j 80002918 <_lf_schedule_at_tag+0x328> + if (tag.time == current_logical_tag.time) { +800027b4: 02012783 lw a5,32(sp) +800027b8: 02412703 lw a4,36(sp) +800027bc: 02fa0263 beq s4,a5,800027e0 <_lf_schedule_at_tag+0x1f0> + microstep_t microstep_of_found = 0; +800027c0: 00000713 li a4,0 + while (microstep_of_found < tag.microstep - 1) { +800027c4: fff68793 addi a5,a3,-1 +800027c8: 06f77063 bleu a5,a4,80002828 <_lf_schedule_at_tag+0x238> + if (found->next == NULL) { +800027cc: 0184a783 lw a5,24(s1) +800027d0: 02078063 beqz a5,800027f0 <_lf_schedule_at_tag+0x200> + microstep_of_found++; +800027d4: 00170713 addi a4,a4,1 + found = found->next; +800027d8: 00078493 mv s1,a5 +800027dc: fe9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + if (tag.time == current_logical_tag.time) { +800027e0: feeb10e3 bne s6,a4,800027c0 <_lf_schedule_at_tag+0x1d0> + microstep_of_found += current_logical_tag.microstep + 1; // Indicating that +800027e4: 02812703 lw a4,40(sp) +800027e8: 00170713 addi a4,a4,1 +800027ec: fd9ff06f j 800027c4 <_lf_schedule_at_tag+0x1d4> + microstep_t undershot_by = (tag.microstep - 1) - microstep_of_found; +800027f0: 40e68733 sub a4,a3,a4 +800027f4: fff70713 addi a4,a4,-1 + if (undershot_by > 0) { +800027f8: 00071863 bnez a4,80002808 <_lf_schedule_at_tag+0x218> + found->next = e; +800027fc: 0124ac23 sw s2,24(s1) + return 1; +80002800: 00100513 li a0,1 +80002804: 1140006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = _lf_create_dummy_events(trigger, tag.time, e, undershot_by); +80002808: 00090693 mv a3,s2 +8000280c: 000a0593 mv a1,s4 +80002810: 000b0613 mv a2,s6 +80002814: 000a8513 mv a0,s5 +80002818: cf5ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000281c: 00a4ac23 sw a0,24(s1) + return 1; +80002820: 00100513 li a0,1 +80002824: 0f40006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next == NULL) { +80002828: 0184a503 lw a0,24(s1) +8000282c: 06050463 beqz a0,80002894 <_lf_schedule_at_tag+0x2a4> + switch (trigger->policy) { +80002830: 02caa783 lw a5,44(s5) +80002834: 00100693 li a3,1 +80002838: 06d78463 beq a5,a3,800028a0 <_lf_schedule_at_tag+0x2b0> +8000283c: 00200693 li a3,2 +80002840: 08d78063 beq a5,a3,800028c0 <_lf_schedule_at_tag+0x2d0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=found->time,.microstep=microstep_of_found+1})) { +80002844: 0004a783 lw a5,0(s1) +80002848: 0044a683 lw a3,4(s1) +8000284c: 04f12023 sw a5,64(sp) +80002850: 04d12223 sw a3,68(sp) +80002854: 00170713 addi a4,a4,1 +80002858: 04e12423 sw a4,72(sp) +8000285c: 00f12023 sw a5,0(sp) +80002860: 00d12223 sw a3,4(sp) +80002864: 00e12423 sw a4,8(sp) +80002868: 04c12783 lw a5,76(sp) +8000286c: 00f12623 sw a5,12(sp) +80002870: 00010513 mv a0,sp +80002874: ba5ff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80002878: 06051063 bnez a0,800028d8 <_lf_schedule_at_tag+0x2e8> + if (found->next->next != NULL) { +8000287c: 0184a783 lw a5,24(s1) +80002880: 0187a703 lw a4,24(a5) +80002884: 10071e63 bnez a4,800029a0 <_lf_schedule_at_tag+0x3b0> + found->next->next = e; +80002888: 0127ac23 sw s2,24(a5) + return 1; +8000288c: 00100513 li a0,1 +80002890: 0880006f j 80002918 <_lf_schedule_at_tag+0x328> + found->next = e; +80002894: 0124ac23 sw s2,24(s1) + return 1; +80002898: 00100513 li a0,1 +8000289c: 07c0006f j 80002918 <_lf_schedule_at_tag+0x328> + if (found->next->token != token) { +800028a0: 01052783 lw a5,16(a0) +800028a4: 01378663 beq a5,s3,800028b0 <_lf_schedule_at_tag+0x2c0> + __done_using(token); +800028a8: 00098513 mv a0,s3 +800028ac: f00ff0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800028b0: 00090513 mv a0,s2 +800028b4: c11ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028b8: 00000513 li a0,0 +800028bc: 05c0006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_replace_token(found->next, token); +800028c0: 00098593 mv a1,s3 +800028c4: cf1ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +800028c8: 00090513 mv a0,s2 +800028cc: bf9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028d0: 00000513 li a0,0 +800028d4: 0440006f j 80002918 <_lf_schedule_at_tag+0x328> + _lf_recycle_event(e); +800028d8: 00090513 mv a0,s2 +800028dc: be9ff0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800028e0: 00000513 li a0,0 +800028e4: 0340006f j 80002918 <_lf_schedule_at_tag+0x328> + microstep_t relative_microstep = tag.microstep; +800028e8: 00842683 lw a3,8(s0) + if (tag.time == current_logical_tag.time) { +800028ec: 02012783 lw a5,32(sp) +800028f0: 02412603 lw a2,36(sp) +800028f4: 04fa0663 beq s4,a5,80002940 <_lf_schedule_at_tag+0x350> + microstep_t relative_microstep = tag.microstep; +800028f8: 00068713 mv a4,a3 + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +800028fc: 04fa0a63 beq s4,a5,80002950 <_lf_schedule_at_tag+0x360> +80002900: 06069063 bnez a3,80002960 <_lf_schedule_at_tag+0x370> + pqueue_insert(event_q, e); +80002904: 00090593 mv a1,s2 +80002908: 87418793 addi a5,gp,-1932 # 80009414 +8000290c: 0007a503 lw a0,0(a5) +80002910: a90ff0ef jal ra,80001ba0 + return 1; +80002914: 00100513 li a0,1 +} +80002918: 06c12083 lw ra,108(sp) +8000291c: 06812403 lw s0,104(sp) +80002920: 06412483 lw s1,100(sp) +80002924: 06012903 lw s2,96(sp) +80002928: 05c12983 lw s3,92(sp) +8000292c: 05812a03 lw s4,88(sp) +80002930: 05412a83 lw s5,84(sp) +80002934: 05012b03 lw s6,80(sp) +80002938: 07010113 addi sp,sp,112 +8000293c: 00008067 ret + if (tag.time == current_logical_tag.time) { +80002940: facb1ce3 bne s6,a2,800028f8 <_lf_schedule_at_tag+0x308> + relative_microstep -= current_logical_tag.microstep; +80002944: 02812703 lw a4,40(sp) +80002948: 40e68733 sub a4,a3,a4 +8000294c: fb1ff06f j 800028fc <_lf_schedule_at_tag+0x30c> + if (((tag.time == current_logical_tag.time) && (relative_microstep == 1)) || +80002950: facb18e3 bne s6,a2,80002900 <_lf_schedule_at_tag+0x310> +80002954: 00100793 li a5,1 +80002958: faf714e3 bne a4,a5,80002900 <_lf_schedule_at_tag+0x310> +8000295c: fa9ff06f j 80002904 <_lf_schedule_at_tag+0x314> + pqueue_insert(event_q, _lf_create_dummy_events(trigger, tag.time, e, relative_microstep)); +80002960: 87418793 addi a5,gp,-1932 # 80009414 +80002964: 0007a403 lw s0,0(a5) +80002968: 00090693 mv a3,s2 +8000296c: 000a0593 mv a1,s4 +80002970: 000b0613 mv a2,s6 +80002974: 000a8513 mv a0,s5 +80002978: b95ff0ef jal ra,8000250c <_lf_create_dummy_events> +8000297c: 00050593 mv a1,a0 +80002980: 00040513 mv a0,s0 +80002984: a1cff0ef jal ra,80001ba0 + return 1; +80002988: 00100513 li a0,1 +8000298c: f8dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002990: fff00513 li a0,-1 +80002994: f85ff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +80002998: fff00513 li a0,-1 +8000299c: f7dff06f j 80002918 <_lf_schedule_at_tag+0x328> + return -1; +800029a0: fff00513 li a0,-1 +800029a4: f75ff06f j 80002918 <_lf_schedule_at_tag+0x328> + +800029a8 <_lf_schedule_init_reactions>: + * was called incorrectly. + */ +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { + // Check to see if the execution + // has not started yet. + if (_lf_execution_started) { +800029a8: 89d1c783 lbu a5,-1891(gp) # 8000943d <_lf_execution_started> +800029ac: 12079863 bnez a5,80002adc <_lf_schedule_init_reactions+0x134> + return 0; + } + + // Check to see if we are actually at startup + // FIXME: add microsteps + if (current_tag.time != start_time) { +800029b0: 8d818793 addi a5,gp,-1832 # 80009478 +800029b4: 0007a803 lw a6,0(a5) +800029b8: 0047a883 lw a7,4(a5) +800029bc: 82018793 addi a5,gp,-2016 # 800093c0 +800029c0: 0007a703 lw a4,0(a5) +800029c4: 0047a783 lw a5,4(a5) +800029c8: 00e80663 beq a6,a4,800029d4 <_lf_schedule_init_reactions+0x2c> + return 0; +800029cc: 00000513 li a0,0 + int return_value = __handle++; + if (__handle < 0) { + __handle = 1; + } + return return_value; +} +800029d0: 00008067 ret + if (current_tag.time != start_time) { +800029d4: fef89ce3 bne a7,a5,800029cc <_lf_schedule_init_reactions+0x24> +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +800029d8: ff010113 addi sp,sp,-16 +800029dc: 00112623 sw ra,12(sp) +800029e0: 00812423 sw s0,8(sp) +800029e4: 00912223 sw s1,4(sp) +800029e8: 01212023 sw s2,0(sp) +800029ec: 00068493 mv s1,a3 +800029f0: 00050413 mv s0,a0 + if (trigger == NULL) { +800029f4: 06050a63 beqz a0,80002a68 <_lf_schedule_init_reactions+0xc0> + if ((trigger->offset + extra_delay) != 0LL) { +800029f8: 01052783 lw a5,16(a0) +800029fc: 01452703 lw a4,20(a0) +80002a00: 00b785b3 add a1,a5,a1 +80002a04: 00f5b7b3 sltu a5,a1,a5 +80002a08: 00c70633 add a2,a4,a2 +80002a0c: 00c787b3 add a5,a5,a2 +80002a10: 00f5e733 or a4,a1,a5 +80002a14: 0c071863 bnez a4,80002ae4 <_lf_schedule_init_reactions+0x13c> + if (trigger->is_timer || trigger->is_physical) { +80002a18: 00854783 lbu a5,8(a0) +80002a1c: 0e079263 bnez a5,80002b00 <_lf_schedule_init_reactions+0x158> +80002a20: 02454783 lbu a5,36(a0) +80002a24: 0e079263 bnez a5,80002b08 <_lf_schedule_init_reactions+0x160> + if (trigger->token != token && trigger->token != NULL) { +80002a28: 02052783 lw a5,32(a0) +80002a2c: 02d78463 beq a5,a3,80002a54 <_lf_schedule_init_reactions+0xac> +80002a30: 02078263 beqz a5,80002a54 <_lf_schedule_init_reactions+0xac> + trigger->token->ok_to_free = OK_TO_FREE; +80002a34: 00100713 li a4,1 +80002a38: 00e7a823 sw a4,16(a5) + trigger->token->ref_count++; +80002a3c: 02052703 lw a4,32(a0) +80002a40: 00c72783 lw a5,12(a4) +80002a44: 00178793 addi a5,a5,1 +80002a48: 00f72623 sw a5,12(a4) + __done_using(trigger->token); +80002a4c: 02052503 lw a0,32(a0) +80002a50: d5cff0ef jal ra,80001fac <__done_using> + trigger->token = token; +80002a54: 02942023 sw s1,32(s0) + if (token != NULL) { +80002a58: 00048463 beqz s1,80002a60 <_lf_schedule_init_reactions+0xb8> + token->ok_to_free = no; +80002a5c: 0004a823 sw zero,16(s1) +handle_t _lf_schedule_init_reactions(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80002a60: 00000493 li s1,0 +80002a64: 0180006f j 80002a7c <_lf_schedule_init_reactions+0xd4> + __done_using(token); +80002a68: 00068513 mv a0,a3 +80002a6c: d40ff0ef jal ra,80001fac <__done_using> + return 0; +80002a70: 00000513 li a0,0 +80002a74: 0740006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + for (int i = 0; i < trigger->number_of_reactions; i++) { +80002a78: 00148493 addi s1,s1,1 +80002a7c: 00442783 lw a5,4(s0) +80002a80: 02f4de63 ble a5,s1,80002abc <_lf_schedule_init_reactions+0x114> + reaction_t* reaction = trigger->reactions[i]; +80002a84: 00042783 lw a5,0(s0) +80002a88: 00249713 slli a4,s1,0x2 +80002a8c: 00e787b3 add a5,a5,a4 +80002a90: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80002a94: 00090593 mv a1,s2 +80002a98: 87018793 addi a5,gp,-1936 # 80009410 +80002a9c: 0007a503 lw a0,0(a5) +80002aa0: 8c0ff0ef jal ra,80001b60 +80002aa4: fc051ae3 bnez a0,80002a78 <_lf_schedule_init_reactions+0xd0> + pqueue_insert(reaction_q, reaction); +80002aa8: 00090593 mv a1,s2 +80002aac: 87018793 addi a5,gp,-1936 # 80009410 +80002ab0: 0007a503 lw a0,0(a5) +80002ab4: 8ecff0ef jal ra,80001ba0 +80002ab8: fc1ff06f j 80002a78 <_lf_schedule_init_reactions+0xd0> + int return_value = __handle++; +80002abc: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +80002ac0: 00072503 lw a0,0(a4) +80002ac4: 00150793 addi a5,a0,1 +80002ac8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +80002acc: 0007de63 bgez a5,80002ae8 <_lf_schedule_init_reactions+0x140> + __handle = 1; +80002ad0: 00100793 li a5,1 +80002ad4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +80002ad8: 0100006f j 80002ae8 <_lf_schedule_init_reactions+0x140> + return 0; +80002adc: 00000513 li a0,0 +80002ae0: 00008067 ret + return 0; +80002ae4: 00000513 li a0,0 +} +80002ae8: 00c12083 lw ra,12(sp) +80002aec: 00812403 lw s0,8(sp) +80002af0: 00412483 lw s1,4(sp) +80002af4: 00012903 lw s2,0(sp) +80002af8: 01010113 addi sp,sp,16 +80002afc: 00008067 ret + return 0; +80002b00: 00000513 li a0,0 +80002b04: fe5ff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> +80002b08: 00000513 li a0,0 +80002b0c: fddff06f j 80002ae8 <_lf_schedule_init_reactions+0x140> + +80002b10 <_lf_action_to_trigger>: + * @param action A pointer to an action struct. + * @return A pointer to the corresponding trigger struct. + */ +trigger_t* _lf_action_to_trigger(void* action) { + return *((trigger_t**)action); +} +80002b10: 00052503 lw a0,0(a0) +80002b14: 00008067 ret + +80002b18 <_lf_advance_logical_time>: + * time and set the microstep to zero. + * + * @param next_time The time step to advance to. + */ +void _lf_advance_logical_time(instant_t next_time) { + if (current_tag.time != next_time) { +80002b18: 8d818793 addi a5,gp,-1832 # 80009478 +80002b1c: 0007a703 lw a4,0(a5) +80002b20: 0047a783 lw a5,4(a5) +80002b24: 00a70c63 beq a4,a0,80002b3c <_lf_advance_logical_time+0x24> + current_tag.time = next_time; +80002b28: 8d818793 addi a5,gp,-1832 # 80009478 +80002b2c: 00a7a023 sw a0,0(a5) +80002b30: 00b7a223 sw a1,4(a5) + current_tag.microstep = 0; +80002b34: 0007a423 sw zero,8(a5) +80002b38: 00008067 ret + if (current_tag.time != next_time) { +80002b3c: feb796e3 bne a5,a1,80002b28 <_lf_advance_logical_time+0x10> + } else { + current_tag.microstep++; +80002b40: 8d818713 addi a4,gp,-1832 # 80009478 +80002b44: 00872783 lw a5,8(a4) +80002b48: 00178793 addi a5,a5,1 +80002b4c: 00f72423 sw a5,8(a4) + } + DEBUG_PRINT("Advanced logical tag to (%lld, %u)", next_time - start_time, current_tag.microstep); +} +80002b50: 00008067 ret + +80002b54 <__set_new_array_impl>: + * @return A pointer to the new or reused token or null if the template token + * is incompatible with this usage. + */ +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { + // If the template token cannot carry a payload, then it is incompatible. + if (token->element_size == 0) { +80002b54: 00452783 lw a5,4(a0) +80002b58: 02078663 beqz a5,80002b84 <__set_new_array_impl+0x30> +lf_token_t* __set_new_array_impl(lf_token_t* token, int length, int num_destinations) { +80002b5c: ff010113 addi sp,sp,-16 +80002b60: 00112623 sw ra,12(sp) +80002b64: 00812423 sw s0,8(sp) +80002b68: 00060413 mv s0,a2 + // fprintf(stderr, "ERROR: set_new_array: specified token cannot carry an array. It has zero element_size.\n"); + return NULL; + } + // First, initialize the token, reusing the one given if possible. + lf_token_t* new_token = __initialize_token(token, length); +80002b6c: 855ff0ef jal ra,800023c0 <__initialize_token> + new_token->ref_count = num_destinations; +80002b70: 00852623 sw s0,12(a0) + DEBUG_PRINT("__set_new_array_impl: Allocated memory for payload %p.", new_token->value); + return new_token; +} +80002b74: 00c12083 lw ra,12(sp) +80002b78: 00812403 lw s0,8(sp) +80002b7c: 01010113 addi sp,sp,16 +80002b80: 00008067 ret + return NULL; +80002b84: 00000513 li a0,0 +} +80002b88: 00008067 ret + +80002b8c : + * Otherwise, this returns a new token with a reference count of 0. + * To ensure that the allocated memory is not leaked, this new token must be + * either passed to an output using set_token() or scheduled with a action + * using schedule_token(). + */ +lf_token_t* writable_copy(lf_token_t* token) { +80002b8c: ff010113 addi sp,sp,-16 +80002b90: 00112623 sw ra,12(sp) +80002b94: 00812423 sw s0,8(sp) +80002b98: 00912223 sw s1,4(sp) +80002b9c: 01212023 sw s2,0(sp) +80002ba0: 00050413 mv s0,a0 + DEBUG_PRINT("writable_copy: Requesting writable copy of token %p with reference count %d.", token, token->ref_count); + if (token->ref_count == 1) { +80002ba4: 00c52703 lw a4,12(a0) +80002ba8: 00100793 li a5,1 +80002bac: 00f70a63 beq a4,a5,80002bc0 + DEBUG_PRINT("writable_copy: Avoided copy because reference count is %d.", token->ref_count); + return token; + } else { + DEBUG_PRINT("writable_copy: Copying array because reference count is greater than 1. It is %d.", token->ref_count); + size_t size = token->element_size * token->length; +80002bb0: 00452483 lw s1,4(a0) +80002bb4: 00852783 lw a5,8(a0) +80002bb8: 02f484b3 mul s1,s1,a5 + if (size == 0) { +80002bbc: 02049063 bnez s1,80002bdc + lf_token_t* result = create_token(token->element_size); + result->length = token->length; + result->value = copy; + return result; + } +} +80002bc0: 00040513 mv a0,s0 +80002bc4: 00c12083 lw ra,12(sp) +80002bc8: 00812403 lw s0,8(sp) +80002bcc: 00412483 lw s1,4(sp) +80002bd0: 00012903 lw s2,0(sp) +80002bd4: 01010113 addi sp,sp,16 +80002bd8: 00008067 ret + void* copy = malloc(size); +80002bdc: 00048513 mv a0,s1 +80002be0: 110040ef jal ra,80006cf0 +80002be4: 00050913 mv s2,a0 + memcpy(copy, token->value, size); +80002be8: 00048613 mv a2,s1 +80002bec: 00042583 lw a1,0(s0) +80002bf0: 684020ef jal ra,80005274 + __count_payload_allocations++; +80002bf4: 86418713 addi a4,gp,-1948 # 80009404 <__count_payload_allocations> +80002bf8: 00072783 lw a5,0(a4) +80002bfc: 00178793 addi a5,a5,1 +80002c00: 00f72023 sw a5,0(a4) + lf_token_t* result = create_token(token->element_size); +80002c04: 00442503 lw a0,4(s0) +80002c08: da0ff0ef jal ra,800021a8 + result->length = token->length; +80002c0c: 00842783 lw a5,8(s0) +80002c10: 00f52423 sw a5,8(a0) + result->value = copy; +80002c14: 01252023 sw s2,0(a0) + return result; +80002c18: 00050413 mv s0,a0 +80002c1c: fa5ff06f j 80002bc0 + +80002c20 : + for (int i = 0; i < argc; i++) { + printf("%s ", argv[i]); + } + printf("\n\n"); + */ +} +80002c20: 00008067 ret + +80002c24 : +/** + * Process the command-line arguments. If the command line arguments are not + * understood, then print a usage message and return 0. Otherwise, return 1. + * @return 1 if the arguments processed successfully, 0 otherwise. + */ +int process_args(int argc, char* argv[]) { +80002c24: fe010113 addi sp,sp,-32 +80002c28: 00112e23 sw ra,28(sp) +80002c2c: 00812c23 sw s0,24(sp) +80002c30: 00912a23 sw s1,20(sp) +80002c34: 01212823 sw s2,16(sp) +80002c38: 01312623 sw s3,12(sp) +80002c3c: 01412423 sw s4,8(sp) +80002c40: 01512223 sw s5,4(sp) +80002c44: 01612023 sw s6,0(sp) +80002c48: 00050993 mv s3,a0 +80002c4c: 00058913 mv s2,a1 + for (int i = 1; i < argc; i++) { +80002c50: 00100413 li s0,1 +80002c54: 03c0006f j 80002c90 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { + if (argc < i + 2) { +80002c58: 00240793 addi a5,s0,2 +80002c5c: 44f9cc63 blt s3,a5,800030b4 + // printf("Error: --fast needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002c60: 00140493 addi s1,s0,1 + char* fast_spec = argv[i]; +80002c64: 00249793 slli a5,s1,0x2 +80002c68: 00f907b3 add a5,s2,a5 +80002c6c: 0007a403 lw s0,0(a5) + if (strcmp(fast_spec, "true") == 0) { +80002c70: 00006597 auipc a1,0x6 +80002c74: bf458593 addi a1,a1,-1036 # 80008864 <_ctype_+0x110> +80002c78: 00040513 mv a0,s0 +80002c7c: 529020ef jal ra,800059a4 +80002c80: 10051e63 bnez a0,80002d9c + fast = true; +80002c84: 00100793 li a5,1 +80002c88: 8af18223 sb a5,-1884(gp) # 80009444 + for (int i = 1; i < argc; i++) { +80002c8c: 00148413 addi s0,s1,1 +80002c90: 3f345c63 ble s3,s0,80003088 + if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fast") == 0) { +80002c94: 00241793 slli a5,s0,0x2 +80002c98: 00f907b3 add a5,s2,a5 +80002c9c: 0007a483 lw s1,0(a5) +80002ca0: 00006597 auipc a1,0x6 +80002ca4: bb858593 addi a1,a1,-1096 # 80008858 <_ctype_+0x104> +80002ca8: 00048513 mv a0,s1 +80002cac: 4f9020ef jal ra,800059a4 +80002cb0: fa0504e3 beqz a0,80002c58 +80002cb4: 00006597 auipc a1,0x6 +80002cb8: ba858593 addi a1,a1,-1112 # 8000885c <_ctype_+0x108> +80002cbc: 00048513 mv a0,s1 +80002cc0: 4e5020ef jal ra,800059a4 +80002cc4: f8050ae3 beqz a0,80002c58 + } else if (strcmp(fast_spec, "false") == 0) { + fast = false; + } else { + // printf("Error: Invalid value for --fast: %s\n", fast_spec); + } + } else if (strcmp(argv[i], "-o") == 0 +80002cc8: 00006597 auipc a1,0x6 +80002ccc: bac58593 addi a1,a1,-1108 # 80008874 <_ctype_+0x120> +80002cd0: 00048513 mv a0,s1 +80002cd4: 4d1020ef jal ra,800059a4 +80002cd8: 02050663 beqz a0,80002d04 + || strcmp(argv[i], "--timeout") == 0 +80002cdc: 00006597 auipc a1,0x6 +80002ce0: b9c58593 addi a1,a1,-1124 # 80008878 <_ctype_+0x124> +80002ce4: 00048513 mv a0,s1 +80002ce8: 4bd020ef jal ra,800059a4 +80002cec: 00050c63 beqz a0,80002d04 + || strcmp(argv[i], "-timeout") == 0) { +80002cf0: 00006597 auipc a1,0x6 +80002cf4: b9458593 addi a1,a1,-1132 # 80008884 <_ctype_+0x130> +80002cf8: 00048513 mv a0,s1 +80002cfc: 4a9020ef jal ra,800059a4 +80002d00: 26051c63 bnez a0,80002f78 + // Tolerate -timeout for legacy uses. + if (argc < i + 3) { +80002d04: 00340793 addi a5,s0,3 +80002d08: 3af9ca63 blt s3,a5,800030bc + // fprintf(stderr, "Error: --timeout needs time and units.\n"); + usage(argc, argv); + return 0; + } + i++; +80002d0c: 00140793 addi a5,s0,1 + char* time_spec = argv[i++]; +80002d10: 00240493 addi s1,s0,2 +80002d14: 00279793 slli a5,a5,0x2 +80002d18: 00f907b3 add a5,s2,a5 +80002d1c: 0007ab03 lw s6,0(a5) + char* units = argv[i]; +80002d20: 00249793 slli a5,s1,0x2 +80002d24: 00f907b3 add a5,s2,a5 +80002d28: 0007aa83 lw s5,0(a5) + duration = atoll(time_spec); +80002d2c: 000b0513 mv a0,s6 +80002d30: 6fd030ef jal ra,80006c2c +80002d34: 00050a13 mv s4,a0 +80002d38: 00058413 mv s0,a1 +80002d3c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d40: 00a7a023 sw a0,0(a5) +80002d44: 00b7a223 sw a1,4(a5) + // A parse error returns 0LL, so check to see whether that is what is meant. + if (duration == 0LL && strncmp(time_spec, "0", 1) != 0) { +80002d48: 00b567b3 or a5,a0,a1 +80002d4c: 00079863 bnez a5,80002d5c +80002d50: 000b4703 lbu a4,0(s6) +80002d54: 03000793 li a5,48 +80002d58: 36f71663 bne a4,a5,800030c4 + // Parse error. + // fprintf(stderr,"Error: invalid time value: %s", time_spec); + usage(argc, argv); + return 0; + } + if (strncmp(units, "sec", 3) == 0) { +80002d5c: 00300613 li a2,3 +80002d60: 00006597 auipc a1,0x6 +80002d64: b3058593 addi a1,a1,-1232 # 80008890 <_ctype_+0x13c> +80002d68: 000a8513 mv a0,s5 +80002d6c: 399040ef jal ra,80007904 +80002d70: 04051463 bnez a0,80002db8 + duration = SEC(duration); +80002d74: 3b9ad7b7 lui a5,0x3b9ad +80002d78: a0078793 addi a5,a5,-1536 # 3b9aca00 +80002d7c: 02f40433 mul s0,s0,a5 +80002d80: 02fa0733 mul a4,s4,a5 +80002d84: 02fa37b3 mulhu a5,s4,a5 +80002d88: 00f40433 add s0,s0,a5 +80002d8c: 81818793 addi a5,gp,-2024 # 800093b8 +80002d90: 00e7a023 sw a4,0(a5) +80002d94: 0087a223 sw s0,4(a5) +80002d98: ef5ff06f j 80002c8c + } else if (strcmp(fast_spec, "false") == 0) { +80002d9c: 00006597 auipc a1,0x6 +80002da0: ad058593 addi a1,a1,-1328 # 8000886c <_ctype_+0x118> +80002da4: 00040513 mv a0,s0 +80002da8: 3fd020ef jal ra,800059a4 +80002dac: ee0510e3 bnez a0,80002c8c + fast = false; +80002db0: 8a018223 sb zero,-1884(gp) # 80009444 +80002db4: ed9ff06f j 80002c8c + } else if (strncmp(units, "msec", 4) == 0) { +80002db8: 00400613 li a2,4 +80002dbc: 00006597 auipc a1,0x6 +80002dc0: ad858593 addi a1,a1,-1320 # 80008894 <_ctype_+0x140> +80002dc4: 000a8513 mv a0,s5 +80002dc8: 33d040ef jal ra,80007904 +80002dcc: 02051663 bnez a0,80002df8 + duration = MSEC(duration); +80002dd0: 000f47b7 lui a5,0xf4 +80002dd4: 24078793 addi a5,a5,576 # f4240 +80002dd8: 02f40433 mul s0,s0,a5 +80002ddc: 02fa0733 mul a4,s4,a5 +80002de0: 02fa37b3 mulhu a5,s4,a5 +80002de4: 00f40433 add s0,s0,a5 +80002de8: 81818793 addi a5,gp,-2024 # 800093b8 +80002dec: 00e7a023 sw a4,0(a5) +80002df0: 0087a223 sw s0,4(a5) +80002df4: e99ff06f j 80002c8c + } else if (strncmp(units, "usec", 4) == 0) { +80002df8: 00400613 li a2,4 +80002dfc: 00006597 auipc a1,0x6 +80002e00: aa058593 addi a1,a1,-1376 # 8000889c <_ctype_+0x148> +80002e04: 000a8513 mv a0,s5 +80002e08: 2fd040ef jal ra,80007904 +80002e0c: 02051463 bnez a0,80002e34 + duration = USEC(duration); +80002e10: 3e800793 li a5,1000 +80002e14: 02878433 mul s0,a5,s0 +80002e18: 03478733 mul a4,a5,s4 +80002e1c: 0347b7b3 mulhu a5,a5,s4 +80002e20: 00f40433 add s0,s0,a5 +80002e24: 81818793 addi a5,gp,-2024 # 800093b8 +80002e28: 00e7a023 sw a4,0(a5) +80002e2c: 0087a223 sw s0,4(a5) +80002e30: e5dff06f j 80002c8c + } else if (strncmp(units, "nsec", 4) == 0) { +80002e34: 00400613 li a2,4 +80002e38: 00006597 auipc a1,0x6 +80002e3c: a6c58593 addi a1,a1,-1428 # 800088a4 <_ctype_+0x150> +80002e40: 000a8513 mv a0,s5 +80002e44: 2c1040ef jal ra,80007904 +80002e48: e40502e3 beqz a0,80002c8c + duration = NSEC(duration); + } else if (strncmp(units, "min", 3) == 0) { +80002e4c: 00300613 li a2,3 +80002e50: 00006597 auipc a1,0x6 +80002e54: a5c58593 addi a1,a1,-1444 # 800088ac <_ctype_+0x158> +80002e58: 000a8513 mv a0,s5 +80002e5c: 2a9040ef jal ra,80007904 +80002e60: 02051c63 bnez a0,80002e98 + duration = MINUTE(duration); +80002e64: f84767b7 lui a5,0xf8476 +80002e68: 80078793 addi a5,a5,-2048 # f8475800 +80002e6c: 02f40733 mul a4,s0,a5 +80002e70: 00d00693 li a3,13 +80002e74: 034686b3 mul a3,a3,s4 +80002e78: 00d70733 add a4,a4,a3 +80002e7c: 02fa06b3 mul a3,s4,a5 +80002e80: 02fa37b3 mulhu a5,s4,a5 +80002e84: 00f70733 add a4,a4,a5 +80002e88: 81818793 addi a5,gp,-2024 # 800093b8 +80002e8c: 00d7a023 sw a3,0(a5) +80002e90: 00e7a223 sw a4,4(a5) +80002e94: df9ff06f j 80002c8c + } else if (strncmp(units, "hour", 4) == 0) { +80002e98: 00400613 li a2,4 +80002e9c: 00006597 auipc a1,0x6 +80002ea0: a1458593 addi a1,a1,-1516 # 800088b0 <_ctype_+0x15c> +80002ea4: 000a8513 mv a0,s5 +80002ea8: 25d040ef jal ra,80007904 +80002eac: 02051a63 bnez a0,80002ee0 + duration = HOUR(duration); +80002eb0: 30b8a737 lui a4,0x30b8a +80002eb4: 028707b3 mul a5,a4,s0 +80002eb8: 34600693 li a3,838 +80002ebc: 034686b3 mul a3,a3,s4 +80002ec0: 00d787b3 add a5,a5,a3 +80002ec4: 034706b3 mul a3,a4,s4 +80002ec8: 03473733 mulhu a4,a4,s4 +80002ecc: 00e787b3 add a5,a5,a4 +80002ed0: 81818713 addi a4,gp,-2024 # 800093b8 +80002ed4: 00d72023 sw a3,0(a4) # 30b8a000 +80002ed8: 00f72223 sw a5,4(a4) +80002edc: db1ff06f j 80002c8c + } else if (strncmp(units, "day", 3) == 0) { +80002ee0: 00300613 li a2,3 +80002ee4: 00006597 auipc a1,0x6 +80002ee8: 9d458593 addi a1,a1,-1580 # 800088b8 <_ctype_+0x164> +80002eec: 000a8513 mv a0,s5 +80002ef0: 215040ef jal ra,80007904 +80002ef4: 02051c63 bnez a0,80002f2c + duration = DAY(duration); +80002ef8: 914f0737 lui a4,0x914f0 +80002efc: 028707b3 mul a5,a4,s0 +80002f00: 000056b7 lui a3,0x5 +80002f04: e9468693 addi a3,a3,-364 # 4e94 +80002f08: 02da06b3 mul a3,s4,a3 +80002f0c: 00d787b3 add a5,a5,a3 +80002f10: 034706b3 mul a3,a4,s4 +80002f14: 03473733 mulhu a4,a4,s4 +80002f18: 00e787b3 add a5,a5,a4 +80002f1c: 81818713 addi a4,gp,-2024 # 800093b8 +80002f20: 00d72023 sw a3,0(a4) # 914f0000 +80002f24: 00f72223 sw a5,4(a4) +80002f28: d65ff06f j 80002c8c + } else if (strncmp(units, "week", 4) == 0) { +80002f2c: 00400613 li a2,4 +80002f30: 00006597 auipc a1,0x6 +80002f34: 98c58593 addi a1,a1,-1652 # 800088bc <_ctype_+0x168> +80002f38: 000a8513 mv a0,s5 +80002f3c: 1c9040ef jal ra,80007904 +80002f40: 18051663 bnez a0,800030cc + duration = WEEK(duration); +80002f44: f9290737 lui a4,0xf9290 +80002f48: 028707b3 mul a5,a4,s0 +80002f4c: 000226b7 lui a3,0x22 +80002f50: 60f68693 addi a3,a3,1551 # 2260f +80002f54: 02da06b3 mul a3,s4,a3 +80002f58: 00d787b3 add a5,a5,a3 +80002f5c: 034706b3 mul a3,a4,s4 +80002f60: 03473733 mulhu a4,a4,s4 +80002f64: 00e787b3 add a5,a5,a4 +80002f68: 81818713 addi a4,gp,-2024 # 800093b8 +80002f6c: 00d72023 sw a3,0(a4) # f9290000 +80002f70: 00f72223 sw a5,4(a4) +80002f74: d19ff06f j 80002c8c + // Invalid units. + // fprintf(stderr,"Error: invalid time units: %s", units); + usage(argc, argv); + return 0; + } + } else if (strcmp(argv[i], "-k") == 0 || strcmp(argv[i], "--keepalive") == 0) { +80002f78: 00006597 auipc a1,0x6 +80002f7c: 94c58593 addi a1,a1,-1716 # 800088c4 <_ctype_+0x170> +80002f80: 00048513 mv a0,s1 +80002f84: 221020ef jal ra,800059a4 +80002f88: 00050c63 beqz a0,80002fa0 +80002f8c: 00006597 auipc a1,0x6 +80002f90: 93c58593 addi a1,a1,-1732 # 800088c8 <_ctype_+0x174> +80002f94: 00048513 mv a0,s1 +80002f98: 20d020ef jal ra,800059a4 +80002f9c: 04051c63 bnez a0,80002ff4 + if (argc < i + 2) { +80002fa0: 00240793 addi a5,s0,2 +80002fa4: 12f9c863 blt s3,a5,800030d4 + // fprintf(stderr,"Error: --keepalive needs a boolean.\n"); + usage(argc, argv); + return 0; + } + i++; +80002fa8: 00140493 addi s1,s0,1 + char* keep_spec = argv[i]; +80002fac: 00249793 slli a5,s1,0x2 +80002fb0: 00f907b3 add a5,s2,a5 +80002fb4: 0007a403 lw s0,0(a5) + if (strcmp(keep_spec, "true") == 0) { +80002fb8: 00006597 auipc a1,0x6 +80002fbc: 8ac58593 addi a1,a1,-1876 # 80008864 <_ctype_+0x110> +80002fc0: 00040513 mv a0,s0 +80002fc4: 1e1020ef jal ra,800059a4 +80002fc8: 00051863 bnez a0,80002fd8 + keepalive_specified = true; +80002fcc: 00100793 li a5,1 +80002fd0: 88f18e23 sb a5,-1892(gp) # 8000943c +80002fd4: cb9ff06f j 80002c8c + } else if (strcmp(keep_spec, "false") == 0) { +80002fd8: 00006597 auipc a1,0x6 +80002fdc: 89458593 addi a1,a1,-1900 # 8000886c <_ctype_+0x118> +80002fe0: 00040513 mv a0,s0 +80002fe4: 1c1020ef jal ra,800059a4 +80002fe8: ca0512e3 bnez a0,80002c8c + keepalive_specified = false; +80002fec: 88018e23 sb zero,-1892(gp) # 8000943c +80002ff0: c9dff06f j 80002c8c + } else { + // fprintf(stderr,"Error: Invalid value for --keepalive: %s\n", keep_spec); + } + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +80002ff4: 00006597 auipc a1,0x6 +80002ff8: 8e058593 addi a1,a1,-1824 # 800088d4 <_ctype_+0x180> +80002ffc: 00048513 mv a0,s1 +80003000: 1a5020ef jal ra,800059a4 +80003004: 00050c63 beqz a0,8000301c +80003008: 00006597 auipc a1,0x6 +8000300c: 8d058593 addi a1,a1,-1840 # 800088d8 <_ctype_+0x184> +80003010: 00048513 mv a0,s1 +80003014: 191020ef jal ra,800059a4 +80003018: 02051463 bnez a0,80003040 + if (argc < i + 2) { +8000301c: 00240493 addi s1,s0,2 +80003020: 0a99ce63 blt s3,s1,800030dc + // fprintf(stderr,"Error: --threads needs an integer argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003024: 00140793 addi a5,s0,1 + char* threads_spec = argv[i++]; +80003028: 00279793 slli a5,a5,0x2 +8000302c: 00f907b3 add a5,s2,a5 + _lf_number_of_threads = atoi(threads_spec); +80003030: 0007a503 lw a0,0(a5) +80003034: 3e1030ef jal ra,80006c14 +80003038: 8aa1a023 sw a0,-1888(gp) # 80009440 <_lf_number_of_threads> + } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0) { +8000303c: c51ff06f j 80002c8c + if (_lf_number_of_threads <= 0) { + // fprintf(stderr,"Error: Invalid value for --threads: %s\n", threads_spec); + } + } else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--id") == 0) { +80003040: 00006597 auipc a1,0x6 +80003044: 8a458593 addi a1,a1,-1884 # 800088e4 <_ctype_+0x190> +80003048: 00048513 mv a0,s1 +8000304c: 159020ef jal ra,800059a4 +80003050: 00050c63 beqz a0,80003068 +80003054: 00006597 auipc a1,0x6 +80003058: 89458593 addi a1,a1,-1900 # 800088e8 <_ctype_+0x194> +8000305c: 00048513 mv a0,s1 +80003060: 145020ef jal ra,800059a4 +80003064: 08051063 bnez a0,800030e4 + if (argc < i + 2) { +80003068: 00240493 addi s1,s0,2 +8000306c: 0899c063 blt s3,s1,800030ec + // fprintf(stderr,"Error: --id needs a string argument.\n"); + usage(argc, argv); + return 0; + } + i++; +80003070: 00140793 addi a5,s0,1 + // printf("Federation ID for executable %s: %s\n", argv[0], argv[i]); + federation_id = argv[i++]; +80003074: 00279793 slli a5,a5,0x2 +80003078: 00f907b3 add a5,s2,a5 +8000307c: 0007a783 lw a5,0(a5) +80003080: 80f1a823 sw a5,-2032(gp) # 800093b0 +80003084: c09ff06f j 80002c8c + // fprintf(stderr,"Error: Unrecognized command-line argument: %s\n", argv[i]); + usage(argc, argv); + return 0; + } + } + return 1; +80003088: 00100513 li a0,1 +} +8000308c: 01c12083 lw ra,28(sp) +80003090: 01812403 lw s0,24(sp) +80003094: 01412483 lw s1,20(sp) +80003098: 01012903 lw s2,16(sp) +8000309c: 00c12983 lw s3,12(sp) +800030a0: 00812a03 lw s4,8(sp) +800030a4: 00412a83 lw s5,4(sp) +800030a8: 00012b03 lw s6,0(sp) +800030ac: 02010113 addi sp,sp,32 +800030b0: 00008067 ret + return 0; +800030b4: 00000513 li a0,0 +800030b8: fd5ff06f j 8000308c + return 0; +800030bc: 00000513 li a0,0 +800030c0: fcdff06f j 8000308c + return 0; +800030c4: 00000513 li a0,0 +800030c8: fc5ff06f j 8000308c + return 0; +800030cc: 00000513 li a0,0 +800030d0: fbdff06f j 8000308c + return 0; +800030d4: 00000513 li a0,0 +800030d8: fb5ff06f j 8000308c + return 0; +800030dc: 00000513 li a0,0 +800030e0: fadff06f j 8000308c + return 0; +800030e4: 00000513 li a0,0 +800030e8: fa5ff06f j 8000308c + return 0; +800030ec: 00000513 li a0,0 +800030f0: f9dff06f j 8000308c + +800030f4 : + if (physical_start_time > 0LL) { + // printf("---- Elapsed physical time (in nsec): "); + // print_time(get_elapsed_physical_time()); + // printf("\n"); + } +} +800030f4: 00008067 ret + +800030f8 <__clock_gettime>: +#endif +// ********** End Windows Support + +// ********** RISC-V Bare Metal Support +// Gets the current physical time by cycle counting +struct timespec __clock_gettime() { +800030f8: fe010113 addi sp,sp,-32 +800030fc: 00112e23 sw ra,28(sp) +80003100: 00812c23 sw s0,24(sp) + +80003104 : + + uint32_t cycle_high; + uint32_t cycle_low; + struct timespec ts; + + asm( +80003104: c80022f3 rdcycleh t0 +80003108: c0002573 rdcycle a0 +8000310c: c8002773 rdcycleh a4 +80003110: fee29ae3 bne t0,a4,80003104 + + // Convert cycles to seconds and nanoseconds + const uint32_t CYCLES_PER_NANOSEC = CLOCK_FREQ / BILLION; + const float NSEC_PER_CYCLE = BILLION / CLOCK_FREQ; + + ts.tv_sec = (time_t) (cycle_low / CLOCK_FREQ) + (time_t) (cycle_high * (UINT32_MAX / CLOCK_FREQ) + (cycle_high / CLOCK_FREQ)); +80003114: 05f5e6b7 lui a3,0x5f5e +80003118: 10068693 addi a3,a3,256 # 5f5e100 +8000311c: 02d55433 divu s0,a0,a3 +80003120: 02a00793 li a5,42 +80003124: 02f707b3 mul a5,a4,a5 +80003128: 02d75733 divu a4,a4,a3 +8000312c: 00e787b3 add a5,a5,a4 +80003130: 00f40433 add s0,s0,a5 + ts.tv_nsec = (long) ((uint32_t) (cycle_low * NSEC_PER_CYCLE) % BILLION); +80003134: 19d030ef jal ra,80006ad0 <__floatunsisf> +80003138: 00006797 auipc a5,0x6 +8000313c: 26878793 addi a5,a5,616 # 800093a0 <__global_locale+0x170> +80003140: 0007a583 lw a1,0(a5) +80003144: 608030ef jal ra,8000674c <__mulsf3> +80003148: 125030ef jal ra,80006a6c <__fixunssfsi> +8000314c: 3b9ad5b7 lui a1,0x3b9ad +80003150: a0058593 addi a1,a1,-1536 # 3b9aca00 +80003154: 02b575b3 remu a1,a0,a1 + + return ts; +} +80003158: 00040513 mv a0,s0 +8000315c: 01c12083 lw ra,28(sp) +80003160: 01812403 lw s0,24(sp) +80003164: 02010113 addi sp,sp,32 +80003168: 00008067 ret + +8000316c : + +// System call interface for getting the current time. +int clock_gettime(clockid_t clk_id, struct timespec *tp) { +8000316c: ff010113 addi sp,sp,-16 +80003170: 00112623 sw ra,12(sp) +80003174: 00812423 sw s0,8(sp) +80003178: 00058413 mv s0,a1 + + *tp = __clock_gettime(); +8000317c: f7dff0ef jal ra,800030f8 <__clock_gettime> +80003180: 00a42023 sw a0,0(s0) +80003184: 00b42223 sw a1,4(s0) + return 0; +} +80003188: 00000513 li a0,0 +8000318c: 00c12083 lw ra,12(sp) +80003190: 00812403 lw s0,8(sp) +80003194: 01010113 addi sp,sp,16 +80003198: 00008067 ret + +8000319c : +instant_t get_physical_time() { +8000319c: fe010113 addi sp,sp,-32 +800031a0: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +800031a4: 00810593 addi a1,sp,8 +800031a8: 00100513 li a0,1 +800031ac: fc1ff0ef jal ra,8000316c + return (physicalTime.tv_sec * BILLION + physicalTime.tv_nsec) + _lf_global_physical_time_offset; +800031b0: 00812683 lw a3,8(sp) +800031b4: 41f6d713 srai a4,a3,0x1f +800031b8: 3b9ad637 lui a2,0x3b9ad +800031bc: a0060613 addi a2,a2,-1536 # 3b9aca00 +800031c0: 02c70733 mul a4,a4,a2 +800031c4: 02c687b3 mul a5,a3,a2 +800031c8: 02c6b6b3 mulhu a3,a3,a2 +800031cc: 00d70733 add a4,a4,a3 +800031d0: 00c12583 lw a1,12(sp) +800031d4: 41f5d693 srai a3,a1,0x1f +800031d8: 00b785b3 add a1,a5,a1 +800031dc: 00f5b7b3 sltu a5,a1,a5 +800031e0: 00d70733 add a4,a4,a3 +800031e4: 00e787b3 add a5,a5,a4 +800031e8: 8a818713 addi a4,gp,-1880 # 80009448 <_lf_global_physical_time_offset> +800031ec: 00072503 lw a0,0(a4) +800031f0: 00472703 lw a4,4(a4) +800031f4: 00a58533 add a0,a1,a0 +800031f8: 00b535b3 sltu a1,a0,a1 +800031fc: 00e787b3 add a5,a5,a4 +80003200: 00f585b3 add a1,a1,a5 +} +80003204: 01c12083 lw ra,28(sp) +80003208: 02010113 addi sp,sp,32 +8000320c: 00008067 ret + +80003210 <__schedule>: +handle_t __schedule(trigger_t* trigger, interval_t extra_delay, lf_token_t* token) { +80003210: fa010113 addi sp,sp,-96 +80003214: 04112e23 sw ra,92(sp) +80003218: 04812c23 sw s0,88(sp) +8000321c: 04912a23 sw s1,84(sp) +80003220: 05212823 sw s2,80(sp) +80003224: 05312623 sw s3,76(sp) +80003228: 05412423 sw s4,72(sp) +8000322c: 05512223 sw s5,68(sp) +80003230: 05612023 sw s6,64(sp) +80003234: 03712e23 sw s7,60(sp) +80003238: 03812c23 sw s8,56(sp) +8000323c: 03912a23 sw s9,52(sp) +80003240: 03a12823 sw s10,48(sp) +80003244: 00050413 mv s0,a0 +80003248: 00058493 mv s1,a1 +8000324c: 00060993 mv s3,a2 +80003250: 00068a93 mv s5,a3 + if (_lf_is_tag_after_stop_tag(current_tag)) { +80003254: 8d818793 addi a5,gp,-1832 # 80009478 +80003258: 0007a603 lw a2,0(a5) +8000325c: 0047a683 lw a3,4(a5) +80003260: 0087a703 lw a4,8(a5) +80003264: 00c7a783 lw a5,12(a5) +80003268: 00c12023 sw a2,0(sp) +8000326c: 00d12223 sw a3,4(sp) +80003270: 00e12423 sw a4,8(sp) +80003274: 00f12623 sw a5,12(sp) +80003278: 00010513 mv a0,sp +8000327c: 99cff0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80003280: 14051663 bnez a0,800033cc <__schedule+0x1bc> + if (trigger == NULL) { +80003284: 18040663 beqz s0,80003410 <__schedule+0x200> + if (token != NULL) { +80003288: 000a8863 beqz s5,80003298 <__schedule+0x88> + token->ref_count++; +8000328c: 00caa783 lw a5,12(s5) +80003290: 00178793 addi a5,a5,1 +80003294: 00faa623 sw a5,12(s5) + interval_t delay = trigger->offset + extra_delay; +80003298: 01042903 lw s2,16(s0) +8000329c: 01442603 lw a2,20(s0) +800032a0: 009904b3 add s1,s2,s1 +800032a4: 0124b933 sltu s2,s1,s2 +800032a8: 01360633 add a2,a2,s3 +800032ac: 00c90933 add s2,s2,a2 + interval_t intended_time = current_tag.time + delay; +800032b0: 8d818793 addi a5,gp,-1832 # 80009478 +800032b4: 0007a983 lw s3,0(a5) +800032b8: 0047a783 lw a5,4(a5) +800032bc: 00998b33 add s6,s3,s1 +800032c0: 013b39b3 sltu s3,s6,s3 +800032c4: 012787b3 add a5,a5,s2 +800032c8: 00f989b3 add s3,s3,a5 + interval_t min_spacing = trigger->period; +800032cc: 01842c03 lw s8,24(s0) +800032d0: 01c42b83 lw s7,28(s0) + event_t* e = _lf_get_new_event(); +800032d4: 9bcff0ef jal ra,80002490 <_lf_get_new_event> +800032d8: 00050a13 mv s4,a0 + e->next = NULL; +800032dc: 00052c23 sw zero,24(a0) + e->token = token; +800032e0: 01552823 sw s5,16(a0) + e->trigger = trigger; +800032e4: 00852423 sw s0,8(a0) + if (trigger->is_physical) { +800032e8: 02444783 lbu a5,36(s0) +800032ec: 12079a63 bnez a5,80003420 <__schedule+0x210> + if (intended_time < current_tag.time) { +800032f0: 8d818793 addi a5,gp,-1832 # 80009478 +800032f4: 0007a483 lw s1,0(a5) +800032f8: 0047a903 lw s2,4(a5) +800032fc: 0129ca63 blt s3,s2,80003310 <__schedule+0x100> +80003300: 01391463 bne s2,s3,80003308 <__schedule+0xf8> +80003304: 009b6663 bltu s6,s1,80003310 <__schedule+0x100> + interval_t intended_time = current_tag.time + delay; +80003308: 000b0493 mv s1,s6 +8000330c: 00098913 mv s2,s3 + event_t* existing = (event_t*)(trigger->last); +80003310: 02842983 lw s3,40(s0) + if (trigger->period < 0) { +80003314: 01c42783 lw a5,28(s0) +80003318: 1207c063 bltz a5,80003438 <__schedule+0x228> + } else if (!trigger->is_timer && existing != NULL) { +8000331c: 00844783 lbu a5,8(s0) +80003320: 04079c63 bnez a5,80003378 <__schedule+0x168> +80003324: 04098a63 beqz s3,80003378 <__schedule+0x168> + instant_t earliest_time = existing->time + min_spacing; +80003328: 0009a783 lw a5,0(s3) +8000332c: 0049a683 lw a3,4(s3) +80003330: 01878cb3 add s9,a5,s8 +80003334: 00fcbb33 sltu s6,s9,a5 +80003338: 01768733 add a4,a3,s7 +8000333c: 00eb0b33 add s6,s6,a4 + if (earliest_time >= intended_time) { +80003340: 032b4c63 blt s6,s2,80003378 <__schedule+0x168> +80003344: 01691463 bne s2,s6,8000334c <__schedule+0x13c> +80003348: 029ce863 bltu s9,s1,80003378 <__schedule+0x168> + switch(trigger->policy) { +8000334c: 02c42703 lw a4,44(s0) +80003350: 00100613 li a2,1 +80003354: 18c70263 beq a4,a2,800034d8 <__schedule+0x2c8> +80003358: 00200613 li a2,2 +8000335c: 1ac70e63 beq a4,a2,80003518 <__schedule+0x308> + if (existing->time == current_tag.time && +80003360: 8d818713 addi a4,gp,-1832 # 80009478 +80003364: 00072603 lw a2,0(a4) +80003368: 00472703 lw a4,4(a4) +8000336c: 20c78a63 beq a5,a2,80003580 <__schedule+0x370> + intended_time = earliest_time; +80003370: 000c8493 mv s1,s9 +80003374: 000b0913 mv s2,s6 + e->time = intended_time; +80003378: 009a2023 sw s1,0(s4) +8000337c: 012a2223 sw s2,4(s4) + if (e->time > stop_tag.time) { +80003380: 00005797 auipc a5,0x5 +80003384: 67078793 addi a5,a5,1648 # 800089f0 +80003388: 0007a703 lw a4,0(a5) +8000338c: 0047a783 lw a5,4(a5) +80003390: 2927c063 blt a5,s2,80003610 <__schedule+0x400> +80003394: 26f90c63 beq s2,a5,8000360c <__schedule+0x3fc> + trigger->last = (event_t*)e; +80003398: 03442423 sw s4,40(s0) + pqueue_insert(event_q, e); +8000339c: 000a0593 mv a1,s4 +800033a0: 87418793 addi a5,gp,-1932 # 80009414 +800033a4: 0007a503 lw a0,0(a5) +800033a8: ff8fe0ef jal ra,80001ba0 + int return_value = __handle++; +800033ac: 81418713 addi a4,gp,-2028 # 800093b4 <__handle> +800033b0: 00072503 lw a0,0(a4) +800033b4: 00150793 addi a5,a0,1 +800033b8: 00f72023 sw a5,0(a4) + if (__handle < 0) { +800033bc: 0007de63 bgez a5,800033d8 <__schedule+0x1c8> + __handle = 1; +800033c0: 00100793 li a5,1 +800033c4: 80f1aa23 sw a5,-2028(gp) # 800093b4 <__handle> +800033c8: 0100006f j 800033d8 <__schedule+0x1c8> + __done_using(token); +800033cc: 000a8513 mv a0,s5 +800033d0: bddfe0ef jal ra,80001fac <__done_using> + return 0; +800033d4: 00000513 li a0,0 +} +800033d8: 05c12083 lw ra,92(sp) +800033dc: 05812403 lw s0,88(sp) +800033e0: 05412483 lw s1,84(sp) +800033e4: 05012903 lw s2,80(sp) +800033e8: 04c12983 lw s3,76(sp) +800033ec: 04812a03 lw s4,72(sp) +800033f0: 04412a83 lw s5,68(sp) +800033f4: 04012b03 lw s6,64(sp) +800033f8: 03c12b83 lw s7,60(sp) +800033fc: 03812c03 lw s8,56(sp) +80003400: 03412c83 lw s9,52(sp) +80003404: 03012d03 lw s10,48(sp) +80003408: 06010113 addi sp,sp,96 +8000340c: 00008067 ret + __done_using(token); +80003410: 000a8513 mv a0,s5 +80003414: b99fe0ef jal ra,80001fac <__done_using> + return 0; +80003418: 00000513 li a0,0 +8000341c: fbdff06f j 800033d8 <__schedule+0x1c8> + intended_time = get_physical_time() + delay; +80003420: d7dff0ef jal ra,8000319c +80003424: 009504b3 add s1,a0,s1 +80003428: 00a4b533 sltu a0,s1,a0 +8000342c: 012585b3 add a1,a1,s2 +80003430: 00b50933 add s2,a0,a1 +80003434: eddff06f j 80003310 <__schedule+0x100> + tag_t intended_tag = (tag_t) {.time = intended_time, .microstep = 0u}; +80003438: 00912823 sw s1,16(sp) +8000343c: 01212a23 sw s2,20(sp) +80003440: 00012c23 sw zero,24(sp) + e->time = intended_tag.time; +80003444: 009a2023 sw s1,0(s4) +80003448: 012a2223 sw s2,4(s4) + event_t* found = (event_t *)pqueue_find_equal_same_priority(event_q, e); +8000344c: 000a0593 mv a1,s4 +80003450: 87418793 addi a5,gp,-1932 # 80009414 +80003454: 0007a503 lw a0,0(a5) +80003458: f08fe0ef jal ra,80001b60 +8000345c: 00050993 mv s3,a0 + if (found != NULL) { +80003460: f0050ce3 beqz a0,80003378 <__schedule+0x168> + intended_tag.microstep++; +80003464: 00100793 li a5,1 +80003468: 00f12c23 sw a5,24(sp) + while(found->next != NULL) { +8000346c: 0140006f j 80003480 <__schedule+0x270> + intended_tag.microstep++; +80003470: 01812783 lw a5,24(sp) +80003474: 00178793 addi a5,a5,1 +80003478: 00f12c23 sw a5,24(sp) + found = found->next; +8000347c: 00070993 mv s3,a4 + while(found->next != NULL) { +80003480: 0189a703 lw a4,24(s3) +80003484: fe0716e3 bnez a4,80003470 <__schedule+0x260> + if (_lf_is_tag_after_stop_tag(intended_tag)) { +80003488: 01012783 lw a5,16(sp) +8000348c: 00f12023 sw a5,0(sp) +80003490: 01412783 lw a5,20(sp) +80003494: 00f12223 sw a5,4(sp) +80003498: 01812783 lw a5,24(sp) +8000349c: 00f12423 sw a5,8(sp) +800034a0: 01c12783 lw a5,28(sp) +800034a4: 00f12623 sw a5,12(sp) +800034a8: 00010513 mv a0,sp +800034ac: f6dfe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800034b0: 00051863 bnez a0,800034c0 <__schedule+0x2b0> + found->next = e; +800034b4: 0149ac23 sw s4,24(s3) + return 0; +800034b8: 00000513 li a0,0 +800034bc: f1dff06f j 800033d8 <__schedule+0x1c8> + printf("WARNING: Attempt to schedule an event after stop_tag was rejected.\n"); +800034c0: 00005517 auipc a0,0x5 +800034c4: 43050513 addi a0,a0,1072 # 800088f0 <_ctype_+0x19c> +800034c8: 378020ef jal ra,80005840 + _lf_recycle_event(e); +800034cc: 000a0513 mv a0,s4 +800034d0: ff5fe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800034d4: fe5ff06f j 800034b8 <__schedule+0x2a8> + if (min_spacing > 0 || +800034d8: 03705263 blez s7,800034fc <__schedule+0x2ec> + if (existing->token != token) { +800034dc: 0109a783 lw a5,16(s3) +800034e0: 01578663 beq a5,s5,800034ec <__schedule+0x2dc> + __done_using(token); +800034e4: 000a8513 mv a0,s5 +800034e8: ac5fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +800034ec: 000a0513 mv a0,s4 +800034f0: fd5fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +800034f4: 00000513 li a0,0 +800034f8: ee1ff06f j 800033d8 <__schedule+0x1c8> + if (min_spacing > 0 || +800034fc: 000b9463 bnez s7,80003504 <__schedule+0x2f4> +80003500: fc0c1ee3 bnez s8,800034dc <__schedule+0x2cc> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003504: 00098593 mv a1,s3 +80003508: 87418793 addi a5,gp,-1932 # 80009414 +8000350c: 0007a503 lw a0,0(a5) +80003510: e50fe0ef jal ra,80001b60 + if (min_spacing > 0 || +80003514: fc0514e3 bnez a0,800034dc <__schedule+0x2cc> + if (existing->time > current_tag.time || +80003518: 0009a603 lw a2,0(s3) +8000351c: 0049a703 lw a4,4(s3) +80003520: 8d818793 addi a5,gp,-1832 # 80009478 +80003524: 0007a683 lw a3,0(a5) +80003528: 0047a783 lw a5,4(a5) +8000352c: 02e7cc63 blt a5,a4,80003564 <__schedule+0x354> +80003530: 00f70a63 beq a4,a5,80003544 <__schedule+0x334> +80003534: 00d60c63 beq a2,a3,8000354c <__schedule+0x33c> + intended_time = earliest_time; +80003538: 000c8493 mv s1,s9 +8000353c: 000b0913 mv s2,s6 +80003540: e39ff06f j 80003378 <__schedule+0x168> + if (existing->time > current_tag.time || +80003544: fec6f8e3 bleu a2,a3,80003534 <__schedule+0x324> +80003548: 01c0006f j 80003564 <__schedule+0x354> +8000354c: fef716e3 bne a4,a5,80003538 <__schedule+0x328> + pqueue_find_equal_same_priority(event_q, existing) != NULL)) { +80003550: 00098593 mv a1,s3 +80003554: 87418793 addi a5,gp,-1932 # 80009414 +80003558: 0007a503 lw a0,0(a5) +8000355c: e04fe0ef jal ra,80001b60 + (existing->time == current_tag.time && +80003560: 08050a63 beqz a0,800035f4 <__schedule+0x3e4> + _lf_replace_token(existing, token); +80003564: 000a8593 mv a1,s5 +80003568: 00098513 mv a0,s3 +8000356c: 848ff0ef jal ra,800025b4 <_lf_replace_token> + _lf_recycle_event(e); +80003570: 000a0513 mv a0,s4 +80003574: f51fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003578: 00000513 li a0,0 +8000357c: e5dff06f j 800033d8 <__schedule+0x1c8> + if (existing->time == current_tag.time && +80003580: dee698e3 bne a3,a4,80003370 <__schedule+0x160> + pqueue_find_equal_same_priority(event_q, existing) != NULL) { +80003584: 00098593 mv a1,s3 +80003588: 87418793 addi a5,gp,-1932 # 80009414 +8000358c: 0007a503 lw a0,0(a5) +80003590: dd0fe0ef jal ra,80001b60 + if (existing->time == current_tag.time && +80003594: 06050663 beqz a0,80003600 <__schedule+0x3f0> + if (_lf_is_tag_after_stop_tag((tag_t){.time=existing->time,.microstep=get_microstep()+1})) { +80003598: 0009a703 lw a4,0(s3) +8000359c: 0049a783 lw a5,4(s3) +800035a0: 02e12023 sw a4,32(sp) +800035a4: 02f12223 sw a5,36(sp) +800035a8: a18fe0ef jal ra,800017c0 +800035ac: 00150513 addi a0,a0,1 +800035b0: 02012783 lw a5,32(sp) +800035b4: 00f12023 sw a5,0(sp) +800035b8: 02412783 lw a5,36(sp) +800035bc: 00f12223 sw a5,4(sp) +800035c0: 00a12423 sw a0,8(sp) +800035c4: 02c12783 lw a5,44(sp) +800035c8: 00f12623 sw a5,12(sp) +800035cc: 00010513 mv a0,sp +800035d0: e49fe0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +800035d4: 00051863 bnez a0,800035e4 <__schedule+0x3d4> + existing->next = e; +800035d8: 0149ac23 sw s4,24(s3) + return 0; // FIXME: return a value +800035dc: 00000513 li a0,0 +800035e0: df9ff06f j 800033d8 <__schedule+0x1c8> + _lf_recycle_event(e); +800035e4: 000a0513 mv a0,s4 +800035e8: eddfe0ef jal ra,800024c4 <_lf_recycle_event> + return 0; +800035ec: 00000513 li a0,0 +800035f0: de9ff06f j 800033d8 <__schedule+0x1c8> + intended_time = earliest_time; +800035f4: 000c8493 mv s1,s9 +800035f8: 000b0913 mv s2,s6 +800035fc: d7dff06f j 80003378 <__schedule+0x168> + intended_time = earliest_time; +80003600: 000c8493 mv s1,s9 +80003604: 000b0913 mv s2,s6 +80003608: d71ff06f j 80003378 <__schedule+0x168> + if (e->time > stop_tag.time) { +8000360c: d89776e3 bleu s1,a4,80003398 <__schedule+0x188> + __done_using(token); +80003610: 000a8513 mv a0,s5 +80003614: 999fe0ef jal ra,80001fac <__done_using> + _lf_recycle_event(e); +80003618: 000a0513 mv a0,s4 +8000361c: ea9fe0ef jal ra,800024c4 <_lf_recycle_event> + return(0); +80003620: 00000513 li a0,0 +80003624: db5ff06f j 800033d8 <__schedule+0x1c8> + +80003628 <__pop_events>: +void __pop_events() { +80003628: fe010113 addi sp,sp,-32 +8000362c: 00112e23 sw ra,28(sp) +80003630: 00812c23 sw s0,24(sp) +80003634: 00912a23 sw s1,20(sp) +80003638: 01212823 sw s2,16(sp) +8000363c: 01312623 sw s3,12(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80003640: 87418793 addi a5,gp,-1932 # 80009414 +80003644: 0007a503 lw a0,0(a5) +80003648: f44fe0ef jal ra,80001d8c +8000364c: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003650: 1280006f j 80003778 <__pop_events+0x150> + pqueue_insert(next_q, event->next); +80003654: 01852583 lw a1,24(a0) +80003658: 86818793 addi a5,gp,-1944 # 80009408 +8000365c: 0007a503 lw a0,0(a5) +80003660: d40fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003664: 00048513 mv a0,s1 +80003668: e5dfe0ef jal ra,800024c4 <_lf_recycle_event> + continue; +8000366c: 10c0006f j 80003778 <__pop_events+0x150> + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +80003670: 00140413 addi s0,s0,1 +80003674: 0084a503 lw a0,8(s1) +80003678: 00452783 lw a5,4(a0) +8000367c: 02f45e63 ble a5,s0,800036b8 <__pop_events+0x90> + reaction_t *reaction = event->trigger->reactions[i]; +80003680: 00052783 lw a5,0(a0) +80003684: 00241713 slli a4,s0,0x2 +80003688: 00e787b3 add a5,a5,a4 +8000368c: 0007a903 lw s2,0(a5) + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003690: 00090593 mv a1,s2 +80003694: 87018793 addi a5,gp,-1936 # 80009410 +80003698: 0007a503 lw a0,0(a5) +8000369c: cc4fe0ef jal ra,80001b60 +800036a0: fc0518e3 bnez a0,80003670 <__pop_events+0x48> + pqueue_insert(reaction_q, reaction); +800036a4: 00090593 mv a1,s2 +800036a8: 87018793 addi a5,gp,-1936 # 80009410 +800036ac: 0007a503 lw a0,0(a5) +800036b0: cf0fe0ef jal ra,80001ba0 +800036b4: fbdff06f j 80003670 <__pop_events+0x48> + if (event->trigger->is_timer && event->trigger->period > 0LL) { +800036b8: 00854783 lbu a5,8(a0) +800036bc: 02078c63 beqz a5,800036f4 <__pop_events+0xcc> +800036c0: 01852783 lw a5,24(a0) +800036c4: 01c52703 lw a4,28(a0) +800036c8: 00e04663 bgtz a4,800036d4 <__pop_events+0xac> +800036cc: 02071463 bnez a4,800036f4 <__pop_events+0xcc> +800036d0: 02078263 beqz a5,800036f4 <__pop_events+0xcc> + event->trigger->period - event->trigger->offset, NULL); +800036d4: 01052583 lw a1,16(a0) +800036d8: 01452683 lw a3,20(a0) + __schedule(event->trigger, +800036dc: 40b785b3 sub a1,a5,a1 +800036e0: 00b7b7b3 sltu a5,a5,a1 +800036e4: 40d70733 sub a4,a4,a3 +800036e8: 40f70633 sub a2,a4,a5 +800036ec: 00000693 li a3,0 +800036f0: b21ff0ef jal ra,80003210 <__schedule> + if (event->trigger->token != event->token +800036f4: 0084a783 lw a5,8(s1) +800036f8: 0207a783 lw a5,32(a5) +800036fc: 0104a703 lw a4,16(s1) +80003700: 02e78863 beq a5,a4,80003730 <__pop_events+0x108> + && event->trigger->token != NULL) { +80003704: 02078663 beqz a5,80003730 <__pop_events+0x108> + event->trigger->token->ok_to_free = OK_TO_FREE; +80003708: 00100713 li a4,1 +8000370c: 00e7a823 sw a4,16(a5) + event->trigger->token->ref_count++; +80003710: 0084a783 lw a5,8(s1) +80003714: 0207a703 lw a4,32(a5) +80003718: 00c72783 lw a5,12(a4) +8000371c: 00178793 addi a5,a5,1 +80003720: 00f72623 sw a5,12(a4) + __done_using(event->trigger->token); +80003724: 0084a783 lw a5,8(s1) +80003728: 0207a503 lw a0,32(a5) +8000372c: 881fe0ef jal ra,80001fac <__done_using> + event->trigger->token = token; +80003730: 0084a783 lw a5,8(s1) +80003734: 0337a023 sw s3,32(a5) + if (token != NULL) +80003738: 00098463 beqz s3,80003740 <__pop_events+0x118> + token->ok_to_free = no; +8000373c: 0009a823 sw zero,16(s3) + event->trigger->is_present = true; +80003740: 0084a783 lw a5,8(s1) +80003744: 00100713 li a4,1 +80003748: 02e78a23 sb a4,52(a5) + if (event->next != NULL) { +8000374c: 0184a583 lw a1,24(s1) +80003750: 00058863 beqz a1,80003760 <__pop_events+0x138> + pqueue_insert(next_q, event->next); +80003754: 86818793 addi a5,gp,-1944 # 80009408 +80003758: 0007a503 lw a0,0(a5) +8000375c: c44fe0ef jal ra,80001ba0 + _lf_recycle_event(event); +80003760: 00048513 mv a0,s1 +80003764: d61fe0ef jal ra,800024c4 <_lf_recycle_event> + event = (event_t*)pqueue_peek(event_q); +80003768: 87418793 addi a5,gp,-1932 # 80009414 +8000376c: 0007a503 lw a0,0(a5) +80003770: e1cfe0ef jal ra,80001d8c +80003774: 00050493 mv s1,a0 + while(event != NULL && event->time == current_tag.time) { +80003778: 06048063 beqz s1,800037d8 <__pop_events+0x1b0> +8000377c: 0004a683 lw a3,0(s1) +80003780: 0044a603 lw a2,4(s1) +80003784: 8d818793 addi a5,gp,-1832 # 80009478 +80003788: 0007a703 lw a4,0(a5) +8000378c: 0047a783 lw a5,4(a5) +80003790: 04e69463 bne a3,a4,800037d8 <__pop_events+0x1b0> +80003794: 04f61263 bne a2,a5,800037d8 <__pop_events+0x1b0> + event = (event_t*)pqueue_pop(event_q); +80003798: 87418793 addi a5,gp,-1932 # 80009414 +8000379c: 0007a503 lw a0,0(a5) +800037a0: d84fe0ef jal ra,80001d24 +800037a4: 00050493 mv s1,a0 + if (event->is_dummy) { +800037a8: 01454783 lbu a5,20(a0) +800037ac: ea0794e3 bnez a5,80003654 <__pop_events+0x2c> + lf_token_t *token = event->token; +800037b0: 01052983 lw s3,16(a0) + for (int i = 0; i < event->trigger->number_of_reactions; i++) { +800037b4: 00000413 li s0,0 +800037b8: ebdff06f j 80003674 <__pop_events+0x4c> + pqueue_insert(event_q, pqueue_pop(next_q)); +800037bc: 87418793 addi a5,gp,-1932 # 80009414 +800037c0: 0007a483 lw s1,0(a5) +800037c4: 00040513 mv a0,s0 +800037c8: d5cfe0ef jal ra,80001d24 +800037cc: 00050593 mv a1,a0 +800037d0: 00048513 mv a0,s1 +800037d4: bccfe0ef jal ra,80001ba0 + while(pqueue_peek(next_q) != NULL) { +800037d8: 86818793 addi a5,gp,-1944 # 80009408 +800037dc: 0007a403 lw s0,0(a5) +800037e0: 00040513 mv a0,s0 +800037e4: da8fe0ef jal ra,80001d8c +800037e8: fc051ae3 bnez a0,800037bc <__pop_events+0x194> +} +800037ec: 01c12083 lw ra,28(sp) +800037f0: 01812403 lw s0,24(sp) +800037f4: 01412483 lw s1,20(sp) +800037f8: 01012903 lw s2,16(sp) +800037fc: 00c12983 lw s3,12(sp) +80003800: 02010113 addi sp,sp,32 +80003804: 00008067 ret + +80003808 : +instant_t get_elapsed_physical_time() { +80003808: fe010113 addi sp,sp,-32 +8000380c: 00112e23 sw ra,28(sp) + clock_gettime(CLOCK_REALTIME, &physicalTime); +80003810: 00810593 addi a1,sp,8 +80003814: 00100513 li a0,1 +80003818: 955ff0ef jal ra,8000316c + return physicalTime.tv_sec * BILLION + physicalTime.tv_nsec - physical_start_time; +8000381c: 00812683 lw a3,8(sp) +80003820: 41f6d713 srai a4,a3,0x1f +80003824: 3b9ad637 lui a2,0x3b9ad +80003828: a0060613 addi a2,a2,-1536 # 3b9aca00 +8000382c: 02c70733 mul a4,a4,a2 +80003830: 02c687b3 mul a5,a3,a2 +80003834: 02c6b6b3 mulhu a3,a3,a2 +80003838: 00d70733 add a4,a4,a3 +8000383c: 00c12583 lw a1,12(sp) +80003840: 41f5d693 srai a3,a1,0x1f +80003844: 00b785b3 add a1,a5,a1 +80003848: 00f5b7b3 sltu a5,a1,a5 +8000384c: 00d70733 add a4,a4,a3 +80003850: 00e787b3 add a5,a5,a4 +80003854: 82818713 addi a4,gp,-2008 # 800093c8 +80003858: 00072503 lw a0,0(a4) +8000385c: 00472703 lw a4,4(a4) +80003860: 40a58533 sub a0,a1,a0 +80003864: 00a5b5b3 sltu a1,a1,a0 +80003868: 40e787b3 sub a5,a5,a4 +8000386c: 40b785b3 sub a1,a5,a1 +} +80003870: 01c12083 lw ra,28(sp) +80003874: 02010113 addi sp,sp,32 +80003878: 00008067 ret + +8000387c : + +// Spin waits until the request time has elapsed. +// FIXME: the multithreaded version needs to take care of rem. +int nanosleep(const struct timespec *req, struct timespec *rem) { +8000387c: fe010113 addi sp,sp,-32 +80003880: 00112e23 sw ra,28(sp) +80003884: 00812c23 sw s0,24(sp) +80003888: 00050413 mv s0,a0 + + struct timespec start_time = __clock_gettime(); +8000388c: 86dff0ef jal ra,800030f8 <__clock_gettime> +80003890: 00a12423 sw a0,8(sp) +80003894: 00b12623 sw a1,12(sp) + struct timespec ts = start_time; +80003898: 00a12023 sw a0,0(sp) +8000389c: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038a0: 0100006f j 800038b0 + ts = __clock_gettime(); +800038a4: 855ff0ef jal ra,800030f8 <__clock_gettime> +800038a8: 00a12023 sw a0,0(sp) +800038ac: 00b12223 sw a1,4(sp) + while (ts.tv_sec < start_time.tv_sec + req->tv_sec || (ts.tv_sec == start_time.tv_sec + req->tv_sec && ts.tv_nsec <= start_time.tv_nsec + req->tv_nsec)) { +800038b0: 00012703 lw a4,0(sp) +800038b4: 00042683 lw a3,0(s0) +800038b8: 00812783 lw a5,8(sp) +800038bc: 00d787b3 add a5,a5,a3 +800038c0: fef742e3 blt a4,a5,800038a4 +800038c4: 00f71c63 bne a4,a5,800038dc +800038c8: 00412703 lw a4,4(sp) +800038cc: 00442683 lw a3,4(s0) +800038d0: 00c12783 lw a5,12(sp) +800038d4: 00d787b3 add a5,a5,a3 +800038d8: fce7d6e3 ble a4,a5,800038a4 + } + + return 0; +} +800038dc: 00000513 li a0,0 +800038e0: 01c12083 lw ra,28(sp) +800038e4: 01812403 lw s0,24(sp) +800038e8: 02010113 addi sp,sp,32 +800038ec: 00008067 ret + +800038f0 <_lf_schedule_token>: +/** + * Schedule the specified trigger at current_tag.time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800038f0: ff010113 addi sp,sp,-16 +800038f4: 00112623 sw ra,12(sp) +800038f8: 00812423 sw s0,8(sp) +800038fc: 00912223 sw s1,4(sp) +80003900: 01212023 sw s2,0(sp) +80003904: 00058413 mv s0,a1 +80003908: 00060493 mv s1,a2 +8000390c: 00068913 mv s2,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003910: a00ff0ef jal ra,80002b10 <_lf_action_to_trigger> + return __schedule(trigger, extra_delay, token); +80003914: 00090693 mv a3,s2 +80003918: 00040593 mv a1,s0 +8000391c: 00048613 mv a2,s1 +80003920: 8f1ff0ef jal ra,80003210 <__schedule> +} +80003924: 00c12083 lw ra,12(sp) +80003928: 00812403 lw s0,8(sp) +8000392c: 00412483 lw s1,4(sp) +80003930: 00012903 lw s2,0(sp) +80003934: 01010113 addi sp,sp,16 +80003938: 00008067 ret + +8000393c : + * See schedule_token(), which this uses, for details. + * @param action Pointer to an action on the self struct. + * @param offset The time offset over and above that in the action. + * @return A handle to the event, or 0 if no event was scheduled, or -1 for error. + */ +handle_t schedule(void* action, interval_t offset) { +8000393c: ff010113 addi sp,sp,-16 +80003940: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, offset, NULL); +80003944: 00000693 li a3,0 +80003948: fa9ff0ef jal ra,800038f0 <_lf_schedule_token> +} +8000394c: 00c12083 lw ra,12(sp) +80003950: 01010113 addi sp,sp,16 +80003954: 00008067 ret + +80003958 : +80003958: ff010113 addi sp,sp,-16 +8000395c: 00112623 sw ra,12(sp) +80003960: 00812423 sw s0,8(sp) +80003964: 0effc417 auipc s0,0xeffc +80003968: 69c40413 addi s0,s0,1692 # 8f000000 +8000396c: 149a07b7 lui a5,0x149a0 +80003970: 00178793 addi a5,a5,1 # 149a0001 +80003974: 00f42023 sw a5,0(s0) +80003978: 00000593 li a1,0 +8000397c: 00000613 li a2,0 +80003980: 00c50513 addi a0,a0,12 +80003984: fb9ff0ef jal ra,8000393c +80003988: 249a07b7 lui a5,0x249a0 +8000398c: 00178793 addi a5,a5,1 # 249a0001 +80003990: 00f42023 sw a5,0(s0) +80003994: 00c12083 lw ra,12(sp) +80003998: 00812403 lw s0,8(sp) +8000399c: 01010113 addi sp,sp,16 +800039a0: 00008067 ret + +800039a4 : +/** + * Schedule the specified trigger at current_time plus the offset of the + * specified trigger plus the delay. + * See reactor.h for documentation. + */ +handle_t schedule_token(void* action, interval_t extra_delay, lf_token_t* token) { +800039a4: ff010113 addi sp,sp,-16 +800039a8: 00112623 sw ra,12(sp) + return _lf_schedule_token(action, extra_delay, token); +800039ac: f45ff0ef jal ra,800038f0 <_lf_schedule_token> +} +800039b0: 00c12083 lw ra,12(sp) +800039b4: 01010113 addi sp,sp,16 +800039b8: 00008067 ret + +800039bc <_lf_schedule_value>: + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_value(void* action, interval_t extra_delay, void* value, int length) { +800039bc: fe010113 addi sp,sp,-32 +800039c0: 00112e23 sw ra,28(sp) +800039c4: 00812c23 sw s0,24(sp) +800039c8: 00912a23 sw s1,20(sp) +800039cc: 01212823 sw s2,16(sp) +800039d0: 01312623 sw s3,12(sp) +800039d4: 01412423 sw s4,8(sp) +800039d8: 00050413 mv s0,a0 +800039dc: 00058913 mv s2,a1 +800039e0: 00060993 mv s3,a2 +800039e4: 00068a13 mv s4,a3 +800039e8: 00070493 mv s1,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +800039ec: 924ff0ef jal ra,80002b10 <_lf_action_to_trigger> + lf_token_t* token = create_token(trigger->element_size); +800039f0: 03052503 lw a0,48(a0) +800039f4: fb4fe0ef jal ra,800021a8 +800039f8: 00050693 mv a3,a0 + token->value = value; +800039fc: 01452023 sw s4,0(a0) + token->length = length; +80003a00: 00952423 sw s1,8(a0) + return schedule_token(action, extra_delay, token); +80003a04: 00090593 mv a1,s2 +80003a08: 00098613 mv a2,s3 +80003a0c: 00040513 mv a0,s0 +80003a10: f95ff0ef jal ra,800039a4 +} +80003a14: 01c12083 lw ra,28(sp) +80003a18: 01812403 lw s0,24(sp) +80003a1c: 01412483 lw s1,20(sp) +80003a20: 01012903 lw s2,16(sp) +80003a24: 00c12983 lw s3,12(sp) +80003a28: 00812a03 lw s4,8(sp) +80003a2c: 02010113 addi sp,sp,32 +80003a30: 00008067 ret + +80003a34 : + +/** + * Variant of schedule_token that creates a token to carry the specified value. + * See reactor.h for documentation. + */ +handle_t schedule_value(void* action, interval_t extra_delay, void* value, int length) { +80003a34: ff010113 addi sp,sp,-16 +80003a38: 00112623 sw ra,12(sp) + return _lf_schedule_value(action, extra_delay, value, length); +80003a3c: f81ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003a40: 00c12083 lw ra,12(sp) +80003a44: 01010113 addi sp,sp,16 +80003a48: 00008067 ret + +80003a4c <_lf_schedule_int>: +handle_t _lf_schedule_int(void* action, interval_t extra_delay, int value) { +80003a4c: fe010113 addi sp,sp,-32 +80003a50: 00112e23 sw ra,28(sp) +80003a54: 00812c23 sw s0,24(sp) +80003a58: 00912a23 sw s1,20(sp) +80003a5c: 01212823 sw s2,16(sp) +80003a60: 01312623 sw s3,12(sp) +80003a64: 00050413 mv s0,a0 +80003a68: 00058913 mv s2,a1 +80003a6c: 00060993 mv s3,a2 +80003a70: 00068493 mv s1,a3 + trigger_t* trigger = _lf_action_to_trigger(action); +80003a74: 89cff0ef jal ra,80002b10 <_lf_action_to_trigger> + if (trigger->element_size != sizeof(int)) { +80003a78: 03052703 lw a4,48(a0) +80003a7c: 00400793 li a5,4 +80003a80: 04f71263 bne a4,a5,80003ac4 <_lf_schedule_int+0x78> + int* container = (int*)malloc(sizeof(int)); +80003a84: 00400513 li a0,4 +80003a88: 268030ef jal ra,80006cf0 +80003a8c: 00050693 mv a3,a0 + *container = value; +80003a90: 00952023 sw s1,0(a0) + return _lf_schedule_value(action, extra_delay, container, 1); +80003a94: 00100713 li a4,1 +80003a98: 00090593 mv a1,s2 +80003a9c: 00098613 mv a2,s3 +80003aa0: 00040513 mv a0,s0 +80003aa4: f19ff0ef jal ra,800039bc <_lf_schedule_value> +} +80003aa8: 01c12083 lw ra,28(sp) +80003aac: 01812403 lw s0,24(sp) +80003ab0: 01412483 lw s1,20(sp) +80003ab4: 01012903 lw s2,16(sp) +80003ab8: 00c12983 lw s3,12(sp) +80003abc: 02010113 addi sp,sp,32 +80003ac0: 00008067 ret + return -1; +80003ac4: fff00513 li a0,-1 +80003ac8: fe1ff06f j 80003aa8 <_lf_schedule_int+0x5c> + +80003acc : +{ +80003acc: ff010113 addi sp,sp,-16 +80003ad0: 00112623 sw ra,12(sp) + return _lf_schedule_int(action, extra_delay, value); +80003ad4: f79ff0ef jal ra,80003a4c <_lf_schedule_int> +} +80003ad8: 00c12083 lw ra,12(sp) +80003adc: 01010113 addi sp,sp,16 +80003ae0: 00008067 ret + +80003ae4 <_lf_schedule_copy>: +/** + * Schedule an action to occur with the specified value and time offset + * with a copy of the specified value. + * See reactor.h for documentation. + */ +handle_t _lf_schedule_copy(void* action, interval_t offset, void* value, int length) { +80003ae4: fe010113 addi sp,sp,-32 +80003ae8: 00112e23 sw ra,28(sp) +80003aec: 00812c23 sw s0,24(sp) +80003af0: 00912a23 sw s1,20(sp) +80003af4: 01212823 sw s2,16(sp) +80003af8: 01312623 sw s3,12(sp) +80003afc: 01412423 sw s4,8(sp) +80003b00: 01512223 sw s5,4(sp) +80003b04: 00050a93 mv s5,a0 +80003b08: 00058913 mv s2,a1 +80003b0c: 00060993 mv s3,a2 +80003b10: 00068493 mv s1,a3 +80003b14: 00070a13 mv s4,a4 + trigger_t* trigger = _lf_action_to_trigger(action); +80003b18: ff9fe0ef jal ra,80002b10 <_lf_action_to_trigger> + if (value == NULL) { +80003b1c: 06048863 beqz s1,80003b8c <_lf_schedule_copy+0xa8> + return schedule_token(action, offset, NULL); + } + if (trigger == NULL || trigger->token == NULL || trigger->token->element_size <= 0) { +80003b20: 08050263 beqz a0,80003ba4 <_lf_schedule_copy+0xc0> +80003b24: 02052503 lw a0,32(a0) +80003b28: 08050263 beqz a0,80003bac <_lf_schedule_copy+0xc8> +80003b2c: 00452783 lw a5,4(a0) +80003b30: 08078263 beqz a5,80003bb4 <_lf_schedule_copy+0xd0> + // fprintf(stderr, "ERROR: schedule: Invalid trigger or element size.\n"); + return -1; + } + DEBUG_PRINT("schedule_copy: Allocating memory for payload (token value): %p.", trigger); + // Initialize token with an array size of length and a reference count of 0. + lf_token_t* token = __initialize_token(trigger->token, length); +80003b34: 000a0593 mv a1,s4 +80003b38: 889fe0ef jal ra,800023c0 <__initialize_token> +80003b3c: 00050413 mv s0,a0 + // Copy the value into the newly allocated memory. + memcpy(token->value, value, token->element_size * length); +80003b40: 00452603 lw a2,4(a0) +80003b44: 02ca0633 mul a2,s4,a2 +80003b48: 00048593 mv a1,s1 +80003b4c: 00052503 lw a0,0(a0) +80003b50: 724010ef jal ra,80005274 + // The schedule function will increment the reference count. + return schedule_token(action, offset, token); +80003b54: 00040693 mv a3,s0 +80003b58: 00090593 mv a1,s2 +80003b5c: 00098613 mv a2,s3 +80003b60: 000a8513 mv a0,s5 +80003b64: e41ff0ef jal ra,800039a4 +} +80003b68: 01c12083 lw ra,28(sp) +80003b6c: 01812403 lw s0,24(sp) +80003b70: 01412483 lw s1,20(sp) +80003b74: 01012903 lw s2,16(sp) +80003b78: 00c12983 lw s3,12(sp) +80003b7c: 00812a03 lw s4,8(sp) +80003b80: 00412a83 lw s5,4(sp) +80003b84: 02010113 addi sp,sp,32 +80003b88: 00008067 ret + return schedule_token(action, offset, NULL); +80003b8c: 00000693 li a3,0 +80003b90: 00090593 mv a1,s2 +80003b94: 00098613 mv a2,s3 +80003b98: 000a8513 mv a0,s5 +80003b9c: e09ff0ef jal ra,800039a4 +80003ba0: fc9ff06f j 80003b68 <_lf_schedule_copy+0x84> + return -1; +80003ba4: fff00513 li a0,-1 +80003ba8: fc1ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bac: fff00513 li a0,-1 +80003bb0: fb9ff06f j 80003b68 <_lf_schedule_copy+0x84> +80003bb4: fff00513 li a0,-1 +80003bb8: fb1ff06f j 80003b68 <_lf_schedule_copy+0x84> + +80003bbc : +handle_t schedule_copy(void* action, interval_t offset, void* value, int length) { +80003bbc: ff010113 addi sp,sp,-16 +80003bc0: 00112623 sw ra,12(sp) + return _lf_schedule_copy(action, offset, value, length); +80003bc4: f21ff0ef jal ra,80003ae4 <_lf_schedule_copy> +} +80003bc8: 00c12083 lw ra,12(sp) +80003bcc: 01010113 addi sp,sp,16 +80003bd0: 00008067 ret + +80003bd4 : + * Return 0 if time advanced to the time of the event and -1 if the wait + * was interrupted or if the timeout time was reached. + */ +int wait_until(instant_t logical_time_ns) { + int return_value = 0; + if (!fast) { +80003bd4: 8a41c783 lbu a5,-1884(gp) # 80009444 +80003bd8: 00078663 beqz a5,80003be4 + int return_value = 0; +80003bdc: 00000513 li a0,0 + struct timespec remaining_time; + // FIXME: If the wait time is less than the time resolution, don't sleep. + return_value = nanosleep(&wait_time, &remaining_time); + } + return return_value; +} +80003be0: 00008067 ret +int wait_until(instant_t logical_time_ns) { +80003be4: fd010113 addi sp,sp,-48 +80003be8: 02112623 sw ra,44(sp) +80003bec: 02812423 sw s0,40(sp) +80003bf0: 02912223 sw s1,36(sp) +80003bf4: 00058493 mv s1,a1 +80003bf8: 00050413 mv s0,a0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003bfc: 00810593 addi a1,sp,8 +80003c00: 00100513 li a0,1 +80003c04: d68ff0ef jal ra,8000316c + - (current_physical_time.tv_sec * BILLION +80003c08: 00812783 lw a5,8(sp) +80003c0c: 41f7d713 srai a4,a5,0x1f +80003c10: 3b9ad6b7 lui a3,0x3b9ad +80003c14: a0068693 addi a3,a3,-1536 # 3b9aca00 +80003c18: 02d70733 mul a4,a4,a3 +80003c1c: 02d785b3 mul a1,a5,a3 +80003c20: 02d7b7b3 mulhu a5,a5,a3 +80003c24: 00f70733 add a4,a4,a5 + + current_physical_time.tv_nsec); +80003c28: 00c12783 lw a5,12(sp) +80003c2c: 41f7d693 srai a3,a5,0x1f +80003c30: 00f587b3 add a5,a1,a5 +80003c34: 00b7b5b3 sltu a1,a5,a1 +80003c38: 00d70733 add a4,a4,a3 +80003c3c: 00e585b3 add a1,a1,a4 + long long ns_to_wait = logical_time_ns +80003c40: 40f407b3 sub a5,s0,a5 +80003c44: 00f43433 sltu s0,s0,a5 +80003c48: 40b485b3 sub a1,s1,a1 +80003c4c: 40858433 sub s0,a1,s0 + if (ns_to_wait <= 0) { +80003c50: 02805e63 blez s0,80003c8c + struct timespec wait_time = {(time_t)ns_to_wait / BILLION, (long)ns_to_wait % BILLION}; +80003c54: 3b9ad737 lui a4,0x3b9ad +80003c58: a0070713 addi a4,a4,-1536 # 3b9aca00 +80003c5c: 02e7c6b3 div a3,a5,a4 +80003c60: 00d12823 sw a3,16(sp) +80003c64: 02e7e7b3 rem a5,a5,a4 +80003c68: 00f12a23 sw a5,20(sp) + return_value = nanosleep(&wait_time, &remaining_time); +80003c6c: 01810593 addi a1,sp,24 +80003c70: 01010513 addi a0,sp,16 +80003c74: c09ff0ef jal ra,8000387c +} +80003c78: 02c12083 lw ra,44(sp) +80003c7c: 02812403 lw s0,40(sp) +80003c80: 02412483 lw s1,36(sp) +80003c84: 03010113 addi sp,sp,48 +80003c88: 00008067 ret + if (ns_to_wait <= 0) { +80003c8c: 00041463 bnez s0,80003c94 +80003c90: fc0792e3 bnez a5,80003c54 + return return_value; +80003c94: 00000513 li a0,0 +80003c98: fe1ff06f j 80003c78 + +80003c9c : + +void print_snapshot() { + // printf(">>> START Snapshot\n"); + // pqueue_dump(reaction_q, stdout, reaction_q->prt); + // printf(">>> END Snapshot\n"); +} +80003c9c: 00008067 ret + +80003ca0 <_lf_enqueue_reaction>: +/** + * Put the specified reaction on the reaction queue. + * This version does not acquire a mutex lock. + * @param reaction The reaction. + */ +void _lf_enqueue_reaction(reaction_t* reaction) { +80003ca0: ff010113 addi sp,sp,-16 +80003ca4: 00112623 sw ra,12(sp) +80003ca8: 00812423 sw s0,8(sp) +80003cac: 00050413 mv s0,a0 + // Do not enqueue this reaction twice. + if (pqueue_find_equal_same_priority(reaction_q, reaction) == NULL) { +80003cb0: 00050593 mv a1,a0 +80003cb4: 87018793 addi a5,gp,-1936 # 80009410 +80003cb8: 0007a503 lw a0,0(a5) +80003cbc: ea5fd0ef jal ra,80001b60 +80003cc0: 00050a63 beqz a0,80003cd4 <_lf_enqueue_reaction+0x34> + DEBUG_PRINT("Enqueing downstream reaction %p.", reaction); + pqueue_insert(reaction_q, reaction); + } +} +80003cc4: 00c12083 lw ra,12(sp) +80003cc8: 00812403 lw s0,8(sp) +80003ccc: 01010113 addi sp,sp,16 +80003cd0: 00008067 ret + pqueue_insert(reaction_q, reaction); +80003cd4: 00040593 mv a1,s0 +80003cd8: 87018793 addi a5,gp,-1936 # 80009410 +80003cdc: 0007a503 lw a0,0(a5) +80003ce0: ec1fd0ef jal ra,80001ba0 +} +80003ce4: fe1ff06f j 80003cc4 <_lf_enqueue_reaction+0x24> + +80003ce8 <_lf_initialize_timer>: +void _lf_initialize_timer(trigger_t* timer) { +80003ce8: fe010113 addi sp,sp,-32 +80003cec: 00112e23 sw ra,28(sp) +80003cf0: 00812c23 sw s0,24(sp) +80003cf4: 00912a23 sw s1,20(sp) +80003cf8: 01212823 sw s2,16(sp) +80003cfc: 01312623 sw s3,12(sp) +80003d00: 00050493 mv s1,a0 + if (timer->offset == 0) { +80003d04: 01052403 lw s0,16(a0) +80003d08: 01452903 lw s2,20(a0) +80003d0c: 012467b3 or a5,s0,s2 +80003d10: 02079e63 bnez a5,80003d4c <_lf_initialize_timer+0x64> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d14: 00000413 li s0,0 +80003d18: 01c0006f j 80003d34 <_lf_initialize_timer+0x4c> + _lf_enqueue_reaction(timer->reactions[i]); +80003d1c: 0004a783 lw a5,0(s1) +80003d20: 00241713 slli a4,s0,0x2 +80003d24: 00e787b3 add a5,a5,a4 +80003d28: 0007a503 lw a0,0(a5) +80003d2c: f75ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int i = 0; i < timer->number_of_reactions; i++) { +80003d30: 00140413 addi s0,s0,1 +80003d34: 0044a783 lw a5,4(s1) +80003d38: fef442e3 blt s0,a5,80003d1c <_lf_initialize_timer+0x34> + if (timer->period == 0) { +80003d3c: 0184a403 lw s0,24(s1) +80003d40: 01c4a903 lw s2,28(s1) +80003d44: 012467b3 or a5,s0,s2 +80003d48: 02078e63 beqz a5,80003d84 <_lf_initialize_timer+0x9c> + event_t* e = _lf_get_new_event(); +80003d4c: f44fe0ef jal ra,80002490 <_lf_get_new_event> +80003d50: 00050993 mv s3,a0 + e->trigger = timer; +80003d54: 00952423 sw s1,8(a0) + e->time = get_logical_time() + delay; +80003d58: a59fd0ef jal ra,800017b0 +80003d5c: 00850433 add s0,a0,s0 +80003d60: 00a43533 sltu a0,s0,a0 +80003d64: 012585b3 add a1,a1,s2 +80003d68: 00b50533 add a0,a0,a1 +80003d6c: 0089a023 sw s0,0(s3) +80003d70: 00a9a223 sw a0,4(s3) + pqueue_insert(event_q, e); +80003d74: 00098593 mv a1,s3 +80003d78: 87418793 addi a5,gp,-1932 # 80009414 +80003d7c: 0007a503 lw a0,0(a5) +80003d80: e21fd0ef jal ra,80001ba0 +} +80003d84: 01c12083 lw ra,28(sp) +80003d88: 01812403 lw s0,24(sp) +80003d8c: 01412483 lw s1,20(sp) +80003d90: 01012903 lw s2,16(sp) +80003d94: 00c12983 lw s3,12(sp) +80003d98: 02010113 addi sp,sp,32 +80003d9c: 00008067 ret + +80003da0 : +void schedule_output_reactions(reaction_t* reaction, int worker) { +80003da0: fc010113 addi sp,sp,-64 +80003da4: 02112e23 sw ra,60(sp) +80003da8: 02812c23 sw s0,56(sp) +80003dac: 02912a23 sw s1,52(sp) +80003db0: 03212823 sw s2,48(sp) +80003db4: 03312623 sw s3,44(sp) +80003db8: 03412423 sw s4,40(sp) +80003dbc: 03512223 sw s5,36(sp) +80003dc0: 03612023 sw s6,32(sp) +80003dc4: 01712e23 sw s7,28(sp) +80003dc8: 01812c23 sw s8,24(sp) +80003dcc: 01912a23 sw s9,20(sp) +80003dd0: 01a12823 sw s10,16(sp) +80003dd4: 00050a93 mv s5,a0 +80003dd8: 00058c93 mv s9,a1 + for (int i=0; i < reaction->num_outputs; i++) { +80003ddc: 00000b93 li s7,0 + int num_downstream_reactions = 0; +80003de0: 00000993 li s3,0 + reaction_t* downstream_to_execute_now = NULL; +80003de4: 00000913 li s2,0 + for (int i=0; i < reaction->num_outputs; i++) { +80003de8: 0900006f j 80003e78 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003dec: 024d2783 lw a5,36(s10) +80003df0: 05579263 bne a5,s5,80003e34 + downstream_to_execute_now = downstream_reaction; +80003df4: 000d0913 mv s2,s10 +80003df8: 00c0006f j 80003e04 + _lf_enqueue_reaction(downstream_reaction); +80003dfc: 000d0513 mv a0,s10 +80003e00: ea1ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e04: 00140413 addi s0,s0,1 +80003e08: 0044a783 lw a5,4(s1) +80003e0c: 02f45e63 ble a5,s0,80003e48 + reaction_t* downstream_reaction = trigger->reactions[k]; +80003e10: 0004a783 lw a5,0(s1) +80003e14: 00241713 slli a4,s0,0x2 +80003e18: 00e787b3 add a5,a5,a4 +80003e1c: 0007ad03 lw s10,0(a5) + if (downstream_reaction != NULL && downstream_reaction != downstream_to_execute_now) { +80003e20: fe0d02e3 beqz s10,80003e04 +80003e24: ffa900e3 beq s2,s10,80003e04 + num_downstream_reactions++; +80003e28: 00198993 addi s3,s3,1 + if (num_downstream_reactions == 1 && downstream_reaction->last_enabling_reaction == reaction) { +80003e2c: 00100793 li a5,1 +80003e30: faf98ee3 beq s3,a5,80003dec + if (downstream_to_execute_now != NULL) { +80003e34: fc0904e3 beqz s2,80003dfc + _lf_enqueue_reaction(downstream_to_execute_now); +80003e38: 00090513 mv a0,s2 +80003e3c: e65ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> + downstream_to_execute_now = NULL; +80003e40: 00000913 li s2,0 +80003e44: fb9ff06f j 80003dfc + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003e48: 001a0a13 addi s4,s4,1 +80003e4c: 030aa783 lw a5,48(s5) +80003e50: 016787b3 add a5,a5,s6 +80003e54: 0007a783 lw a5,0(a5) +80003e58: 00fa5e63 ble a5,s4,80003e74 + trigger_t* trigger = triggerArray[j]; +80003e5c: 002a1793 slli a5,s4,0x2 +80003e60: 00fc07b3 add a5,s8,a5 +80003e64: 0007a483 lw s1,0(a5) + if (trigger != NULL) { +80003e68: fe0480e3 beqz s1,80003e48 + for (int k=0; k < trigger->number_of_reactions; k++) { +80003e6c: 00000413 li s0,0 +80003e70: f99ff06f j 80003e08 + for (int i=0; i < reaction->num_outputs; i++) { +80003e74: 001b8b93 addi s7,s7,1 +80003e78: 028aa783 lw a5,40(s5) +80003e7c: 02fbd863 ble a5,s7,80003eac + if (*(reaction->output_produced[i])) { +80003e80: 02caa783 lw a5,44(s5) +80003e84: 002b9b13 slli s6,s7,0x2 +80003e88: 016787b3 add a5,a5,s6 +80003e8c: 0007a783 lw a5,0(a5) +80003e90: 0007c783 lbu a5,0(a5) +80003e94: fe0780e3 beqz a5,80003e74 + trigger_t** triggerArray = (reaction->triggers)[i]; +80003e98: 034aa783 lw a5,52(s5) +80003e9c: 016787b3 add a5,a5,s6 +80003ea0: 0007ac03 lw s8,0(a5) + for (int j=0; j < reaction->triggered_sizes[i]; j++) { +80003ea4: 00000a13 li s4,0 +80003ea8: fa5ff06f j 80003e4c + if (downstream_to_execute_now != NULL) { +80003eac: 02090863 beqz s2,80003edc + if (downstream_to_execute_now->deadline > 0LL) { +80003eb0: 04092703 lw a4,64(s2) +80003eb4: 04492783 lw a5,68(s2) +80003eb8: 06f04063 bgtz a5,80003f18 +80003ebc: 04078c63 beqz a5,80003f14 + downstream_to_execute_now->function(downstream_to_execute_now->self); +80003ec0: 00092783 lw a5,0(s2) +80003ec4: 00492503 lw a0,4(s2) +80003ec8: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003ecc: 000c8593 mv a1,s9 +80003ed0: 00090513 mv a0,s2 +80003ed4: ecdff0ef jal ra,80003da0 + downstream_to_execute_now->is_tardy = false; +80003ed8: 04090423 sb zero,72(s2) +} +80003edc: 03c12083 lw ra,60(sp) +80003ee0: 03812403 lw s0,56(sp) +80003ee4: 03412483 lw s1,52(sp) +80003ee8: 03012903 lw s2,48(sp) +80003eec: 02c12983 lw s3,44(sp) +80003ef0: 02812a03 lw s4,40(sp) +80003ef4: 02412a83 lw s5,36(sp) +80003ef8: 02012b03 lw s6,32(sp) +80003efc: 01c12b83 lw s7,28(sp) +80003f00: 01812c03 lw s8,24(sp) +80003f04: 01412c83 lw s9,20(sp) +80003f08: 01012d03 lw s10,16(sp) +80003f0c: 04010113 addi sp,sp,64 +80003f10: 00008067 ret + if (downstream_to_execute_now->deadline > 0LL) { +80003f14: fa0706e3 beqz a4,80003ec0 + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80003f18: 00810593 addi a1,sp,8 +80003f1c: 00100513 li a0,1 +80003f20: a4cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80003f24: 00812683 lw a3,8(sp) +80003f28: 41f6d713 srai a4,a3,0x1f +80003f2c: 3b9ad637 lui a2,0x3b9ad +80003f30: a0060613 addi a2,a2,-1536 # 3b9aca00 +80003f34: 02c70733 mul a4,a4,a2 +80003f38: 02c687b3 mul a5,a3,a2 +80003f3c: 02c6b6b3 mulhu a3,a3,a2 +80003f40: 00d70733 add a4,a4,a3 + + current_physical_time.tv_nsec; +80003f44: 00c12683 lw a3,12(sp) +80003f48: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +80003f4c: 00d786b3 add a3,a5,a3 +80003f50: 00f6b7b3 sltu a5,a3,a5 +80003f54: 00c70733 add a4,a4,a2 +80003f58: 00e787b3 add a5,a5,a4 +80003f5c: 00078713 mv a4,a5 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003f60: 8d818613 addi a2,gp,-1832 # 80009478 +80003f64: 00062783 lw a5,0(a2) +80003f68: 00462583 lw a1,4(a2) +80003f6c: 04092603 lw a2,64(s2) +80003f70: 04492503 lw a0,68(s2) +80003f74: 00c78633 add a2,a5,a2 +80003f78: 00f637b3 sltu a5,a2,a5 +80003f7c: 00a585b3 add a1,a1,a0 +80003f80: 00b787b3 add a5,a5,a1 +80003f84: 02e7d263 ble a4,a5,80003fa8 + reaction_function_t handler = downstream_to_execute_now->deadline_violation_handler; +80003f88: 04c92783 lw a5,76(s2) + if (handler != NULL) { +80003f8c: f40786e3 beqz a5,80003ed8 + (*handler)(downstream_to_execute_now->self); +80003f90: 00492503 lw a0,4(s2) +80003f94: 000780e7 jalr a5 + schedule_output_reactions(downstream_to_execute_now, worker); +80003f98: 000c8593 mv a1,s9 +80003f9c: 00090513 mv a0,s2 +80003fa0: e01ff0ef jal ra,80003da0 +80003fa4: f35ff06f j 80003ed8 + if (physical_time > current_tag.time + downstream_to_execute_now->deadline) { +80003fa8: f0f71ce3 bne a4,a5,80003ec0 +80003fac: fcd66ee3 bltu a2,a3,80003f88 +80003fb0: f11ff06f j 80003ec0 + +80003fb4 <_lf_do_step>: + * Execute all the reactions in the reaction queue at the current tag. + * + * @return Returns 1 if the execution should continue and 0 if the execution + * should stop. + */ +int _lf_do_step() { +80003fb4: fc010113 addi sp,sp,-64 +80003fb8: 02112e23 sw ra,60(sp) +80003fbc: 02812c23 sw s0,56(sp) + // Invoke reactions. + while(pqueue_size(reaction_q) > 0) { +80003fc0: 0240006f j 80003fe4 <_lf_do_step+0x30> + // There are currently two distinct deadline mechanisms: + // local deadlines are defined with the reaction; + // container deadlines are defined in the container. + // They can have different deadlines, so we have to check both. + // Handle the local deadline first. + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +80003fc4: 00061463 bnez a2,80003fcc <_lf_do_step+0x18> +80003fc8: 0a079063 bnez a5,80004068 <_lf_do_step+0xb4> + } + + if (!violation) { + // Invoke the reaction function. + tracepoint_reaction_starts(reaction, 0); // 0 indicates unthreaded. + reaction->function(reaction->self); +80003fcc: 00042783 lw a5,0(s0) +80003fd0: 00442503 lw a0,4(s0) +80003fd4: 000780e7 jalr a5 + tracepoint_reaction_ends(reaction, 0); + + // If the reaction produced outputs, put the resulting triggered + // reactions into the queue. + schedule_output_reactions(reaction, 0); +80003fd8: 00000593 li a1,0 +80003fdc: 00040513 mv a0,s0 +80003fe0: dc1ff0ef jal ra,80003da0 + while(pqueue_size(reaction_q) > 0) { +80003fe4: 87018793 addi a5,gp,-1936 # 80009410 +80003fe8: 0007a403 lw s0,0(a5) +80003fec: 00040513 mv a0,s0 +80003ff0: b65fd0ef jal ra,80001b54 +80003ff4: 0a050e63 beqz a0,800040b0 <_lf_do_step+0xfc> + reaction_t* reaction = (reaction_t*)pqueue_pop(reaction_q); +80003ff8: 00040513 mv a0,s0 +80003ffc: d29fd0ef jal ra,80001d24 +80004000: 00050413 mv s0,a0 + if (reaction->deadline > 0LL) { +80004004: 04052703 lw a4,64(a0) +80004008: 04452783 lw a5,68(a0) +8000400c: 00f04663 bgtz a5,80004018 <_lf_do_step+0x64> +80004010: fa079ee3 bnez a5,80003fcc <_lf_do_step+0x18> +80004014: fa070ce3 beqz a4,80003fcc <_lf_do_step+0x18> + clock_gettime(CLOCK_REALTIME, ¤t_physical_time); +80004018: 02810593 addi a1,sp,40 +8000401c: 00100513 li a0,1 +80004020: 94cff0ef jal ra,8000316c + current_physical_time.tv_sec * BILLION +80004024: 02812683 lw a3,40(sp) +80004028: 41f6d793 srai a5,a3,0x1f +8000402c: 3b9ad637 lui a2,0x3b9ad +80004030: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004034: 02c787b3 mul a5,a5,a2 +80004038: 02c68733 mul a4,a3,a2 +8000403c: 02c6b6b3 mulhu a3,a3,a2 +80004040: 00d787b3 add a5,a5,a3 + + current_physical_time.tv_nsec; +80004044: 02c12683 lw a3,44(sp) +80004048: 41f6d613 srai a2,a3,0x1f + instant_t physical_time = +8000404c: 00d706b3 add a3,a4,a3 +80004050: 00e6b733 sltu a4,a3,a4 +80004054: 00c787b3 add a5,a5,a2 +80004058: 00f70733 add a4,a4,a5 + if (reaction->deadline > 0LL && physical_time > current_tag.time + reaction->deadline) { +8000405c: 04042783 lw a5,64(s0) +80004060: 04442603 lw a2,68(s0) +80004064: f6c050e3 blez a2,80003fc4 <_lf_do_step+0x10> +80004068: 8d818513 addi a0,gp,-1832 # 80009478 +8000406c: 00052583 lw a1,0(a0) +80004070: 00452503 lw a0,4(a0) +80004074: 00b785b3 add a1,a5,a1 +80004078: 00f5b7b3 sltu a5,a1,a5 +8000407c: 00a60633 add a2,a2,a0 +80004080: 00c787b3 add a5,a5,a2 +80004084: 00e7c663 blt a5,a4,80004090 <_lf_do_step+0xdc> +80004088: f4f712e3 bne a4,a5,80003fcc <_lf_do_step+0x18> +8000408c: f4d5f0e3 bleu a3,a1,80003fcc <_lf_do_step+0x18> + reaction_function_t handler = reaction->deadline_violation_handler; +80004090: 04c42783 lw a5,76(s0) + if (handler != NULL) { +80004094: f40788e3 beqz a5,80003fe4 <_lf_do_step+0x30> + (*handler)(reaction->self); +80004098: 00442503 lw a0,4(s0) +8000409c: 000780e7 jalr a5 + schedule_output_reactions(reaction, 0); +800040a0: 00000593 li a1,0 +800040a4: 00040513 mv a0,s0 +800040a8: cf9ff0ef jal ra,80003da0 +800040ac: f39ff06f j 80003fe4 <_lf_do_step+0x30> + } + + // No more reactions should be blocked at this point. + //assert(pqueue_size(blocked_q) == 0); + + if (compare_tags(current_tag, stop_tag) >= 0) { +800040b0: 8d818793 addi a5,gp,-1832 # 80009478 +800040b4: 0007a603 lw a2,0(a5) +800040b8: 0047a683 lw a3,4(a5) +800040bc: 0087a703 lw a4,8(a5) +800040c0: 00c7a783 lw a5,12(a5) +800040c4: 00c12823 sw a2,16(sp) +800040c8: 00d12a23 sw a3,20(sp) +800040cc: 00e12c23 sw a4,24(sp) +800040d0: 00f12e23 sw a5,28(sp) +800040d4: 00005797 auipc a5,0x5 +800040d8: 91c78793 addi a5,a5,-1764 # 800089f0 +800040dc: 0007a603 lw a2,0(a5) +800040e0: 0047a683 lw a3,4(a5) +800040e4: 0087a703 lw a4,8(a5) +800040e8: 00c7a783 lw a5,12(a5) +800040ec: 00c12023 sw a2,0(sp) +800040f0: 00d12223 sw a3,4(sp) +800040f4: 00e12423 sw a4,8(sp) +800040f8: 00f12623 sw a5,12(sp) +800040fc: 00010593 mv a1,sp +80004100: 01010513 addi a0,sp,16 +80004104: db0fd0ef jal ra,800016b4 +80004108: 00054c63 bltz a0,80004120 <_lf_do_step+0x16c> + return 0; +8000410c: 00000513 li a0,0 + } + + return 1; +} +80004110: 03c12083 lw ra,60(sp) +80004114: 03812403 lw s0,56(sp) +80004118: 04010113 addi sp,sp,64 +8000411c: 00008067 ret + return 1; +80004120: 00100513 li a0,1 +80004124: fedff06f j 80004110 <_lf_do_step+0x15c> + +80004128 : + +/** + * Stop execution at the conclusion of the next microstep. + */ +void request_stop() { + stop_tag = current_tag; +80004128: 00005797 auipc a5,0x5 +8000412c: 8c878793 addi a5,a5,-1848 # 800089f0 +80004130: 8d818713 addi a4,gp,-1832 # 80009478 +80004134: 00072583 lw a1,0(a4) +80004138: 00472603 lw a2,4(a4) +8000413c: 00872683 lw a3,8(a4) +80004140: 00c72703 lw a4,12(a4) +80004144: 00b7a023 sw a1,0(a5) +80004148: 00c7a223 sw a2,4(a5) +8000414c: 00d7a423 sw a3,8(a5) +80004150: 00e7a623 sw a4,12(a5) + stop_tag.microstep++; +80004154: 0087a703 lw a4,8(a5) +80004158: 00170713 addi a4,a4,1 +8000415c: 00e7a423 sw a4,8(a5) +} +80004160: 00008067 ret + +80004164 : +80004164: ff010113 addi sp,sp,-16 +80004168: 00112623 sw ra,12(sp) +8000416c: 1e000593 li a1,480 +80004170: 00100513 li a0,1 +80004174: 2d1020ef jal ra,80006c44 +80004178: 00050793 mv a5,a0 +8000417c: 02450713 addi a4,a0,36 +80004180: 00e52e23 sw a4,28(a0) +80004184: 03450713 addi a4,a0,52 +80004188: 02e52623 sw a4,44(a0) +8000418c: 06052023 sw zero,96(a0) +80004190: ffffd717 auipc a4,0xffffd +80004194: 39070713 addi a4,a4,912 # 80001520 +80004198: 04e52c23 sw a4,88(a0) +8000419c: 04a7ae23 sw a0,92(a5) +800041a0: 0a052223 sw zero,164(a0) +800041a4: 0a052423 sw zero,168(a0) +800041a8: 00100713 li a4,1 +800041ac: 0ae52c23 sw a4,184(a0) +800041b0: ffffe697 auipc a3,0xffffe +800041b4: 07068693 addi a3,a3,112 # 80002220 +800041b8: 0ad52823 sw a3,176(a0) +800041bc: 0aa7aa23 sw a0,180(a5) +800041c0: 0e052e23 sw zero,252(a0) +800041c4: 10052023 sw zero,256(a0) +800041c8: 00200693 li a3,2 +800041cc: 10d52823 sw a3,272(a0) +800041d0: ffffd617 auipc a2,0xffffd +800041d4: 3a460613 addi a2,a2,932 # 80001574 +800041d8: 10c52423 sw a2,264(a0) +800041dc: 10a7a623 sw a0,268(a5) +800041e0: 14052a23 sw zero,340(a0) +800041e4: 14052c23 sw zero,344(a0) +800041e8: 18052423 sw zero,392(a0) +800041ec: 0b050613 addi a2,a0,176 +800041f0: 18c52c23 sw a2,408(a0) +800041f4: 10850613 addi a2,a0,264 +800041f8: 18c52e23 sw a2,412(a0) +800041fc: 19850613 addi a2,a0,408 +80004200: 16c52023 sw a2,352(a0) +80004204: 16d52223 sw a3,356(a0) +80004208: 18e52823 sw a4,400(a0) +8000420c: 1c052423 sw zero,456(a0) +80004210: 05850693 addi a3,a0,88 +80004214: 1cd52c23 sw a3,472(a0) +80004218: 1d850693 addi a3,a0,472 +8000421c: 1ad52023 sw a3,416(a0) +80004220: 1ae52223 sw a4,420(a0) +80004224: 1ce52823 sw a4,464(a0) +80004228: 00c12083 lw ra,12(sp) +8000422c: 01010113 addi sp,sp,16 +80004230: 00008067 ret + +80004234 : +80004234: ff010113 addi sp,sp,-16 +80004238: 00112623 sw ra,12(sp) +8000423c: 00812423 sw s0,8(sp) +80004240: 00912223 sw s1,4(sp) +80004244: 00050413 mv s0,a0 +80004248: 08452503 lw a0,132(a0) +8000424c: 00050463 beqz a0,80004254 +80004250: 2ad020ef jal ra,80006cfc +80004254: 08c42503 lw a0,140(s0) +80004258: 00050463 beqz a0,80004260 +8000425c: 2a1020ef jal ra,80006cfc +80004260: 08842503 lw a0,136(s0) +80004264: 00050463 beqz a0,8000426c +80004268: 295020ef jal ra,80006cfc +8000426c: 0dc42503 lw a0,220(s0) +80004270: 00050463 beqz a0,80004278 +80004274: 289020ef jal ra,80006cfc +80004278: 0e442503 lw a0,228(s0) +8000427c: 00050463 beqz a0,80004284 +80004280: 27d020ef jal ra,80006cfc +80004284: 0e042503 lw a0,224(s0) +80004288: 00050463 beqz a0,80004290 +8000428c: 271020ef jal ra,80006cfc +80004290: 13442503 lw a0,308(s0) +80004294: 00050463 beqz a0,8000429c +80004298: 265020ef jal ra,80006cfc +8000429c: 13c42503 lw a0,316(s0) +800042a0: 00050463 beqz a0,800042a8 +800042a4: 259020ef jal ra,80006cfc +800042a8: 13842503 lw a0,312(s0) +800042ac: 00050463 beqz a0,800042b4 +800042b0: 24d020ef jal ra,80006cfc +800042b4: 00000493 li s1,0 +800042b8: 01c0006f j 800042d4 +800042bc: 08c42783 lw a5,140(s0) +800042c0: 00249713 slli a4,s1,0x2 +800042c4: 00e787b3 add a5,a5,a4 +800042c8: 0007a503 lw a0,0(a5) +800042cc: 231020ef jal ra,80006cfc +800042d0: 00148493 addi s1,s1,1 +800042d4: 08042783 lw a5,128(s0) +800042d8: fef4c2e3 blt s1,a5,800042bc +800042dc: 00000493 li s1,0 +800042e0: 01c0006f j 800042fc +800042e4: 0e442783 lw a5,228(s0) +800042e8: 00249713 slli a4,s1,0x2 +800042ec: 00e787b3 add a5,a5,a4 +800042f0: 0007a503 lw a0,0(a5) +800042f4: 209020ef jal ra,80006cfc +800042f8: 00148493 addi s1,s1,1 +800042fc: 0d842783 lw a5,216(s0) +80004300: fef4c2e3 blt s1,a5,800042e4 +80004304: 00000493 li s1,0 +80004308: 01c0006f j 80004324 +8000430c: 13c42783 lw a5,316(s0) +80004310: 00249713 slli a4,s1,0x2 +80004314: 00e787b3 add a5,a5,a4 +80004318: 0007a503 lw a0,0(a5) +8000431c: 1e1020ef jal ra,80006cfc +80004320: 00148493 addi s1,s1,1 +80004324: 13042783 lw a5,304(s0) +80004328: fef4c2e3 blt s1,a5,8000430c +8000432c: 00040513 mv a0,s0 +80004330: 1cd020ef jal ra,80006cfc +80004334: 00c12083 lw ra,12(sp) +80004338: 00812403 lw s0,8(sp) +8000433c: 00412483 lw s1,4(sp) +80004340: 01010113 addi sp,sp,16 +80004344: 00008067 ret + +80004348 : +80004348: ff010113 addi sp,sp,-16 +8000434c: 00112623 sw ra,12(sp) +80004350: 0c000593 li a1,192 +80004354: 00100513 li a0,1 +80004358: 0ed020ef jal ra,80006c44 +8000435c: 00050793 mv a5,a0 +80004360: 01050713 addi a4,a0,16 +80004364: 00e52423 sw a4,8(a0) +80004368: 02052823 sw zero,48(a0) +8000436c: ffffd717 auipc a4,0xffffd +80004370: 22c70713 addi a4,a4,556 # 80001598 +80004374: 02e52423 sw a4,40(a0) +80004378: 02a7a623 sw a0,44(a5) +8000437c: 06052a23 sw zero,116(a0) +80004380: 06052c23 sw zero,120(a0) +80004384: 0a052423 sw zero,168(a0) +80004388: 02850713 addi a4,a0,40 +8000438c: 0ae52c23 sw a4,184(a0) +80004390: 0b850713 addi a4,a0,184 +80004394: 08e52023 sw a4,128(a0) +80004398: 00100713 li a4,1 +8000439c: 08e52223 sw a4,132(a0) +800043a0: 00400713 li a4,4 +800043a4: 0ae52823 sw a4,176(a0) +800043a8: 00c12083 lw ra,12(sp) +800043ac: 01010113 addi sp,sp,16 +800043b0: 00008067 ret + +800043b4 : +800043b4: ff010113 addi sp,sp,-16 +800043b8: 00112623 sw ra,12(sp) +800043bc: 00812423 sw s0,8(sp) +800043c0: 00912223 sw s1,4(sp) +800043c4: 00050493 mv s1,a0 +800043c8: 05452503 lw a0,84(a0) +800043cc: 00050463 beqz a0,800043d4 +800043d0: 12d020ef jal ra,80006cfc +800043d4: 05c4a503 lw a0,92(s1) +800043d8: 00050463 beqz a0,800043e0 +800043dc: 121020ef jal ra,80006cfc +800043e0: 0584a503 lw a0,88(s1) +800043e4: 00050463 beqz a0,800043ec +800043e8: 115020ef jal ra,80006cfc +800043ec: 00000413 li s0,0 +800043f0: 01c0006f j 8000440c +800043f4: 05c4a783 lw a5,92(s1) +800043f8: 00241713 slli a4,s0,0x2 +800043fc: 00e787b3 add a5,a5,a4 +80004400: 0007a503 lw a0,0(a5) +80004404: 0f9020ef jal ra,80006cfc +80004408: 00140413 addi s0,s0,1 +8000440c: 0504a783 lw a5,80(s1) +80004410: fef442e3 blt s0,a5,800043f4 +80004414: 00048513 mv a0,s1 +80004418: 0e5020ef jal ra,80006cfc +8000441c: 00c12083 lw ra,12(sp) +80004420: 00812403 lw s0,8(sp) +80004424: 00412483 lw s1,4(sp) +80004428: 01010113 addi sp,sp,16 +8000442c: 00008067 ret + +80004430 : +80004430: ff010113 addi sp,sp,-16 +80004434: 00112623 sw ra,12(sp) +80004438: 1f800593 li a1,504 +8000443c: 00100513 li a0,1 +80004440: 005020ef jal ra,80006c44 +80004444: 00050793 mv a5,a0 +80004448: 1b850713 addi a4,a0,440 +8000444c: 00e52623 sw a4,12(a0) +80004450: 02052c23 sw zero,56(a0) +80004454: fffff717 auipc a4,0xfffff +80004458: 50470713 addi a4,a4,1284 # 80003958 +8000445c: 02e52823 sw a4,48(a0) +80004460: 02a7aa23 sw a0,52(a5) +80004464: 06052e23 sw zero,124(a0) +80004468: 08052023 sw zero,128(a0) +8000446c: 00100713 li a4,1 +80004470: 08e52823 sw a4,144(a0) +80004474: ffffd697 auipc a3,0xffffd +80004478: 17068693 addi a3,a3,368 # 800015e4 +8000447c: 08d52423 sw a3,136(a0) +80004480: 08a7a623 sw a0,140(a5) +80004484: 0c052a23 sw zero,212(a0) +80004488: 0c052c23 sw zero,216(a0) +8000448c: 00200693 li a3,2 +80004490: 0ed52423 sw a3,232(a0) +80004494: ffffd697 auipc a3,0xffffd +80004498: 1c868693 addi a3,a3,456 # 8000165c +8000449c: 0ed52023 sw a3,224(a0) +800044a0: 0ea7a223 sw a0,228(a5) +800044a4: 12052623 sw zero,300(a0) +800044a8: 12052823 sw zero,304(a0) +800044ac: 16052023 sw zero,352(a0) +800044b0: 0e050693 addi a3,a0,224 +800044b4: 16d52823 sw a3,368(a0) +800044b8: 17050693 addi a3,a0,368 +800044bc: 12d52c23 sw a3,312(a0) +800044c0: 12e52e23 sw a4,316(a0) +800044c4: 14e50023 sb a4,320(a0) +800044c8: 03050693 addi a3,a0,48 +800044cc: 1ad52823 sw a3,432(a0) +800044d0: 1a052023 sw zero,416(a0) +800044d4: 1b050693 addi a3,a0,432 +800044d8: 16d52c23 sw a3,376(a0) +800044dc: 16e52e23 sw a4,380(a0) +800044e0: 18050023 sb zero,384(a0) +800044e4: 1e052023 sw zero,480(a0) +800044e8: 08850693 addi a3,a0,136 +800044ec: 1ed52823 sw a3,496(a0) +800044f0: 1f050693 addi a3,a0,496 +800044f4: 1ad52c23 sw a3,440(a0) +800044f8: 1ae52e23 sw a4,444(a0) +800044fc: 1c050e23 sb zero,476(a0) +80004500: 1ee52423 sw a4,488(a0) +80004504: 00c12083 lw ra,12(sp) +80004508: 01010113 addi sp,sp,16 +8000450c: 00008067 ret + +80004510 : +80004510: ff010113 addi sp,sp,-16 +80004514: 00112623 sw ra,12(sp) +80004518: 00812423 sw s0,8(sp) +8000451c: 00912223 sw s1,4(sp) +80004520: 00050413 mv s0,a0 +80004524: 05c52503 lw a0,92(a0) +80004528: 00050463 beqz a0,80004530 +8000452c: 7d0020ef jal ra,80006cfc +80004530: 06442503 lw a0,100(s0) +80004534: 00050463 beqz a0,8000453c +80004538: 7c4020ef jal ra,80006cfc +8000453c: 06042503 lw a0,96(s0) +80004540: 00050463 beqz a0,80004548 +80004544: 7b8020ef jal ra,80006cfc +80004548: 0b442503 lw a0,180(s0) +8000454c: 00050463 beqz a0,80004554 +80004550: 7ac020ef jal ra,80006cfc +80004554: 0bc42503 lw a0,188(s0) +80004558: 00050463 beqz a0,80004560 +8000455c: 7a0020ef jal ra,80006cfc +80004560: 0b842503 lw a0,184(s0) +80004564: 00050463 beqz a0,8000456c +80004568: 794020ef jal ra,80006cfc +8000456c: 10c42503 lw a0,268(s0) +80004570: 00050463 beqz a0,80004578 +80004574: 788020ef jal ra,80006cfc +80004578: 11442503 lw a0,276(s0) +8000457c: 00050463 beqz a0,80004584 +80004580: 77c020ef jal ra,80006cfc +80004584: 11042503 lw a0,272(s0) +80004588: 00050463 beqz a0,80004590 +8000458c: 770020ef jal ra,80006cfc +80004590: 00000493 li s1,0 +80004594: 01c0006f j 800045b0 +80004598: 06442783 lw a5,100(s0) +8000459c: 00249713 slli a4,s1,0x2 +800045a0: 00e787b3 add a5,a5,a4 +800045a4: 0007a503 lw a0,0(a5) +800045a8: 754020ef jal ra,80006cfc +800045ac: 00148493 addi s1,s1,1 +800045b0: 05842783 lw a5,88(s0) +800045b4: fef4c2e3 blt s1,a5,80004598 +800045b8: 00000493 li s1,0 +800045bc: 01c0006f j 800045d8 +800045c0: 0bc42783 lw a5,188(s0) +800045c4: 00249713 slli a4,s1,0x2 +800045c8: 00e787b3 add a5,a5,a4 +800045cc: 0007a503 lw a0,0(a5) +800045d0: 72c020ef jal ra,80006cfc +800045d4: 00148493 addi s1,s1,1 +800045d8: 0b042783 lw a5,176(s0) +800045dc: fef4c2e3 blt s1,a5,800045c0 +800045e0: 00000493 li s1,0 +800045e4: 01c0006f j 80004600 +800045e8: 11442783 lw a5,276(s0) +800045ec: 00249713 slli a4,s1,0x2 +800045f0: 00e787b3 add a5,a5,a4 +800045f4: 0007a503 lw a0,0(a5) +800045f8: 704020ef jal ra,80006cfc +800045fc: 00148493 addi s1,s1,1 +80004600: 10842783 lw a5,264(s0) +80004604: fef4c2e3 blt s1,a5,800045e8 +80004608: 00040513 mv a0,s0 +8000460c: 6f0020ef jal ra,80006cfc +80004610: 00c12083 lw ra,12(sp) +80004614: 00812403 lw s0,8(sp) +80004618: 00412483 lw s1,4(sp) +8000461c: 01010113 addi sp,sp,16 +80004620: 00008067 ret + +80004624 : +80004624: ff010113 addi sp,sp,-16 +80004628: 00112623 sw ra,12(sp) +8000462c: 00400593 li a1,4 +80004630: 00100513 li a0,1 +80004634: 610020ef jal ra,80006c44 +80004638: 00c12083 lw ra,12(sp) +8000463c: 01010113 addi sp,sp,16 +80004640: 00008067 ret + +80004644 : +80004644: ff010113 addi sp,sp,-16 +80004648: 00112623 sw ra,12(sp) +8000464c: 6b0020ef jal ra,80006cfc +80004650: 00c12083 lw ra,12(sp) +80004654: 01010113 addi sp,sp,16 +80004658: 00008067 ret + +8000465c <__set_default_command_line_options>: +8000465c: 00008067 ret + +80004660 <__action_for_port>: +80004660: 00000513 li a0,0 +80004664: 00008067 ret + +80004668 <__initialize_trigger_objects>: +80004668: fd010113 addi sp,sp,-48 +8000466c: 02112623 sw ra,44(sp) +80004670: 02812423 sw s0,40(sp) +80004674: 02912223 sw s1,36(sp) +80004678: 03212023 sw s2,32(sp) +8000467c: 01312e23 sw s3,28(sp) +80004680: 01412c23 sw s4,24(sp) +80004684: 01512a23 sw s5,20(sp) +80004688: 01612823 sw s6,16(sp) +8000468c: 01712623 sw s7,12(sp) +80004690: 01812423 sw s8,8(sp) +80004694: 01912223 sw s9,4(sp) +80004698: 01a12023 sw s10,0(sp) +8000469c: 00200793 li a5,2 +800046a0: 88f1a023 sw a5,-1920(gp) # 80009420 <__tokens_with_ref_count_size> +800046a4: 01800513 li a0,24 +800046a8: 648020ef jal ra,80006cf0 +800046ac: 88818a13 addi s4,gp,-1912 # 80009428 <__tokens_with_ref_count> +800046b0: 00aa2023 sw a0,0(s4) +800046b4: 00400793 li a5,4 +800046b8: 88f1aa23 sw a5,-1900(gp) # 80009434 <__is_present_fields_size> +800046bc: 01000513 li a0,16 +800046c0: 630020ef jal ra,80006cf0 +800046c4: 89818a93 addi s5,gp,-1896 # 80009438 <__is_present_fields> +800046c8: 00aaa023 sw a0,0(s5) +800046cc: f59ff0ef jal ra,80004624 +800046d0: 00050b93 mv s7,a0 +800046d4: d5dff0ef jal ra,80004430 +800046d8: 00050413 mv s0,a0 +800046dc: ffe00993 li s3,-2 +800046e0: 03352023 sw s3,32(a0) +800046e4: 03352623 sw s3,44(a0) +800046e8: 03050b13 addi s6,a0,48 +800046ec: 8561a423 sw s6,-1976(gp) # 800093e8 <__startup_reactions> +800046f0: 00050223 sb zero,4(a0) +800046f4: 01900793 li a5,25 +800046f8: 00f52423 sw a5,8(a0) +800046fc: 00000613 li a2,0 +80004700: 00000693 li a3,0 +80004704: 1cc52423 sw a2,456(a0) +80004708: 1cd52623 sw a3,460(a0) +8000470c: fff00713 li a4,-1 +80004710: fff00793 li a5,-1 +80004714: 1ce52823 sw a4,464(a0) +80004718: 1cf52a23 sw a5,468(a0) +8000471c: 14c52423 sw a2,328(a0) +80004720: 14d52623 sw a3,332(a0) +80004724: 05f5e737 lui a4,0x5f5e +80004728: 10070713 addi a4,a4,256 # 5f5e100 +8000472c: 00000793 li a5,0 +80004730: 14e52823 sw a4,336(a0) +80004734: 14f52a23 sw a5,340(a0) +80004738: 13850793 addi a5,a0,312 +8000473c: 84f1a623 sw a5,-1972(gp) # 800093ec <__timer_triggers> +80004740: 00100513 li a0,1 +80004744: 9fdfd0ef jal ra,80002140 <__create_token> +80004748: 1ca42c23 sw a0,472(s0) +8000474c: 1e040623 sb zero,492(s0) +80004750: 000a2783 lw a5,0(s4) +80004754: 1d840713 addi a4,s0,472 +80004758: 00e7a023 sw a4,0(a5) +8000475c: 000a2783 lw a5,0(s4) +80004760: 1ec40713 addi a4,s0,492 +80004764: 00e7a223 sw a4,4(a5) +80004768: 00100713 li a4,1 +8000476c: 00e78423 sb a4,8(a5) +80004770: bd9ff0ef jal ra,80004348 +80004774: 00050913 mv s2,a0 +80004778: 01352623 sw s3,12(a0) +8000477c: 00050223 sb zero,4(a0) +80004780: 9e5ff0ef jal ra,80004164 +80004784: 00050493 mv s1,a0 +80004788: 05352823 sw s3,80(a0) +8000478c: 03352023 sw s3,32(a0) +80004790: 03352823 sw s3,48(a0) +80004794: 00052223 sw zero,4(a0) +80004798: 05000793 li a5,80 +8000479c: 00f52423 sw a5,8(a0) +800047a0: 00052623 sw zero,12(a0) +800047a4: 00052823 sw zero,16(a0) +800047a8: 00052a23 sw zero,20(a0) +800047ac: 00052c23 sw zero,24(a0) +800047b0: 000ba023 sw zero,0(s7) +800047b4: 00042023 sw zero,0(s0) +800047b8: 04042c23 sw zero,88(s0) +800047bc: 00100993 li s3,1 +800047c0: 0b342823 sw s3,176(s0) +800047c4: 00400513 li a0,4 +800047c8: 528020ef jal ra,80006cf0 +800047cc: 0aa42a23 sw a0,180(s0) +800047d0: 00400513 li a0,4 +800047d4: 51c020ef jal ra,80006cf0 +800047d8: 0aa42e23 sw a0,188(s0) +800047dc: 00400513 li a0,4 +800047e0: 510020ef jal ra,80006cf0 +800047e4: 0aa42c23 sw a0,184(s0) +800047e8: 0b442783 lw a5,180(s0) +800047ec: 01940c13 addi s8,s0,25 +800047f0: 0187a023 sw s8,0(a5) +800047f4: 11342423 sw s3,264(s0) +800047f8: 00400513 li a0,4 +800047fc: 4f4020ef jal ra,80006cf0 +80004800: 10a42623 sw a0,268(s0) +80004804: 00400513 li a0,4 +80004808: 4e8020ef jal ra,80006cf0 +8000480c: 10a42a23 sw a0,276(s0) +80004810: 00400513 li a0,4 +80004814: 4dc020ef jal ra,80006cf0 +80004818: 10a42823 sw a0,272(s0) +8000481c: 10c42783 lw a5,268(s0) +80004820: 02540b93 addi s7,s0,37 +80004824: 0177a023 sw s7,0(a5) +80004828: 04042a23 sw zero,84(s0) +8000482c: 0b642623 sw s6,172(s0) +80004830: 0b842783 lw a5,184(s0) +80004834: 0137a023 sw s3,0(a5) +80004838: 00400513 li a0,4 +8000483c: 4b4020ef jal ra,80006cf0 +80004840: 0bc42783 lw a5,188(s0) +80004844: 00a7a023 sw a0,0(a5) +80004848: 1a048793 addi a5,s1,416 +8000484c: 00f52023 sw a5,0(a0) +80004850: 08840d13 addi s10,s0,136 +80004854: 11a42223 sw s10,260(s0) +80004858: 11042783 lw a5,272(s0) +8000485c: 0137a023 sw s3,0(a5) +80004860: 00400513 li a0,4 +80004864: 48c020ef jal ra,80006cf0 +80004868: 11442783 lw a5,276(s0) +8000486c: 00a7a023 sw a0,0(a5) +80004870: 16048793 addi a5,s1,352 +80004874: 00f52023 sw a5,0(a0) +80004878: 01342e23 sw s3,28(s0) +8000487c: 03342423 sw s3,40(s0) +80004880: 00092023 sw zero,0(s2) +80004884: 04092823 sw zero,80(s2) +80004888: 0b048c93 addi s9,s1,176 +8000488c: 05992623 sw s9,76(s2) +80004890: 0004a023 sw zero,0(s1) +80004894: 0804a023 sw zero,128(s1) +80004898: 0d34ac23 sw s3,216(s1) +8000489c: 00400513 li a0,4 +800048a0: 450020ef jal ra,80006cf0 +800048a4: 0ca4ae23 sw a0,220(s1) +800048a8: 00400513 li a0,4 +800048ac: 444020ef jal ra,80006cf0 +800048b0: 0ea4a223 sw a0,228(s1) +800048b4: 00400513 li a0,4 +800048b8: 438020ef jal ra,80006cf0 +800048bc: 0ea4a023 sw a0,224(s1) +800048c0: 0dc4a783 lw a5,220(s1) +800048c4: 04048b13 addi s6,s1,64 +800048c8: 0167a023 sw s6,0(a5) +800048cc: 1204a823 sw zero,304(s1) +800048d0: 07a4ae23 sw s10,124(s1) +800048d4: 0c04aa23 sw zero,212(s1) +800048d8: 0e04a783 lw a5,224(s1) +800048dc: 0137a023 sw s3,0(a5) +800048e0: 00400513 li a0,4 +800048e4: 40c020ef jal ra,80006cf0 +800048e8: 0e44a783 lw a5,228(s1) +800048ec: 00a7a023 sw a0,0(a5) +800048f0: 08090793 addi a5,s2,128 +800048f4: 00f52023 sw a5,0(a0) +800048f8: 1394a623 sw s9,300(s1) +800048fc: 0534a223 sw s3,68(s1) +80004900: 00400513 li a0,4 +80004904: 83dfd0ef jal ra,80002140 <__create_token> +80004908: 04a4a423 sw a0,72(s1) +8000490c: 01840793 addi a5,s0,24 +80004910: 02f4a623 sw a5,44(s1) +80004914: 02440793 addi a5,s0,36 +80004918: 00f4ae23 sw a5,28(s1) +8000491c: 03c48793 addi a5,s1,60 +80004920: 00f92423 sw a5,8(s2) +80004924: 000aa783 lw a5,0(s5) +80004928: 01140713 addi a4,s0,17 +8000492c: 00e7a023 sw a4,0(a5) +80004930: 00892703 lw a4,8(s2) +80004934: 000a2783 lw a5,0(s4) +80004938: 00c70713 addi a4,a4,12 +8000493c: 00e7a623 sw a4,12(a5) +80004940: 00892703 lw a4,8(s2) +80004944: 00470713 addi a4,a4,4 +80004948: 00e7a823 sw a4,16(a5) +8000494c: 00078a23 sb zero,20(a5) +80004950: 000aa783 lw a5,0(s5) +80004954: 0187a223 sw s8,4(a5) +80004958: 0177a423 sw s7,8(a5) +8000495c: 0167a623 sw s6,12(a5) +80004960: 01f00713 li a4,31 +80004964: 00000793 li a5,0 +80004968: 04e42423 sw a4,72(s0) +8000496c: 04f42623 sw a5,76(s0) +80004970: ffff0637 lui a2,0xffff0 +80004974: 800006b7 lui a3,0x80000 +80004978: fff6c693 not a3,a3 +8000497c: 04c42023 sw a2,64(s0) +80004980: 04d42223 sw a3,68(s0) +80004984: 0ae42023 sw a4,160(s0) +80004988: 0af42223 sw a5,164(s0) +8000498c: ffff0737 lui a4,0xffff0 +80004990: 00170713 addi a4,a4,1 # ffff0001 +80004994: 800007b7 lui a5,0x80000 +80004998: fff7c793 not a5,a5 +8000499c: 08e42c23 sw a4,152(s0) +800049a0: 08f42e23 sw a5,156(s0) +800049a4: 00d00713 li a4,13 +800049a8: 00000793 li a5,0 +800049ac: 0ee42c23 sw a4,248(s0) +800049b0: 0ef42e23 sw a5,252(s0) +800049b4: ffff0637 lui a2,0xffff0 +800049b8: 00260613 addi a2,a2,2 # ffff0002 +800049bc: 800006b7 lui a3,0x80000 +800049c0: fff6c693 not a3,a3 +800049c4: 0ec42823 sw a2,240(s0) +800049c8: 0ed42a23 sw a3,244(s0) +800049cc: 01800713 li a4,24 +800049d0: 00000793 li a5,0 +800049d4: 04e92023 sw a4,64(s2) +800049d8: 04f92223 sw a5,68(s2) +800049dc: ffff0737 lui a4,0xffff0 +800049e0: 00470713 addi a4,a4,4 # ffff0004 +800049e4: 800007b7 lui a5,0x80000 +800049e8: fff7c793 not a5,a5 +800049ec: 02e92c23 sw a4,56(s2) +800049f0: 02f92e23 sw a5,60(s2) +800049f4: 01200513 li a0,18 +800049f8: 00000593 li a1,0 +800049fc: 06a4a823 sw a0,112(s1) +80004a00: 06b4aa23 sw a1,116(s1) +80004a04: 06c4a423 sw a2,104(s1) +80004a08: 06d4a623 sw a3,108(s1) +80004a0c: 01b00613 li a2,27 +80004a10: 00000693 li a3,0 +80004a14: 0cc4a423 sw a2,200(s1) +80004a18: 0cd4a623 sw a3,204(s1) +80004a1c: ffff0637 lui a2,0xffff0 +80004a20: 00360613 addi a2,a2,3 # ffff0003 +80004a24: 800006b7 lui a3,0x80000 +80004a28: fff6c693 not a3,a3 +80004a2c: 0cc4a023 sw a2,192(s1) +80004a30: 0cd4a223 sw a3,196(s1) +80004a34: 00700613 li a2,7 +80004a38: 00000693 li a3,0 +80004a3c: 12c4a023 sw a2,288(s1) +80004a40: 12d4a223 sw a3,292(s1) +80004a44: 10e4ac23 sw a4,280(s1) +80004a48: 10f4ae23 sw a5,284(s1) +80004a4c: 02c12083 lw ra,44(sp) +80004a50: 02812403 lw s0,40(sp) +80004a54: 02412483 lw s1,36(sp) +80004a58: 02012903 lw s2,32(sp) +80004a5c: 01c12983 lw s3,28(sp) +80004a60: 01812a03 lw s4,24(sp) +80004a64: 01412a83 lw s5,20(sp) +80004a68: 01012b03 lw s6,16(sp) +80004a6c: 00c12b83 lw s7,12(sp) +80004a70: 00812c03 lw s8,8(sp) +80004a74: 00412c83 lw s9,4(sp) +80004a78: 00012d03 lw s10,0(sp) +80004a7c: 03010113 addi sp,sp,48 +80004a80: 00008067 ret + +80004a84 : +void initialize() { +80004a84: fc010113 addi sp,sp,-64 +80004a88: 02112e23 sw ra,60(sp) + __count_payload_allocations = 0; +80004a8c: 8601a223 sw zero,-1948(gp) # 80009404 <__count_payload_allocations> + __count_token_allocations = 0; +80004a90: 8601a023 sw zero,-1952(gp) # 80009400 <__count_token_allocations> + reaction_q = pqueue_init(INITIAL_REACT_QUEUE_SIZE, in_reverse_order, get_reaction_index, +80004a94: ffffd817 auipc a6,0xffffd +80004a98: a8480813 addi a6,a6,-1404 # 80001518 +80004a9c: ffffd797 auipc a5,0xffffd +80004aa0: a3878793 addi a5,a5,-1480 # 800014d4 +80004aa4: ffffd717 auipc a4,0xffffd +80004aa8: a6c70713 addi a4,a4,-1428 # 80001510 +80004aac: ffffd697 auipc a3,0xffffd +80004ab0: a5468693 addi a3,a3,-1452 # 80001500 +80004ab4: ffffd617 auipc a2,0xffffd +80004ab8: a3860613 addi a2,a2,-1480 # 800014ec +80004abc: ffffd597 auipc a1,0xffffd +80004ac0: 9dc58593 addi a1,a1,-1572 # 80001498 +80004ac4: 00a00513 li a0,10 +80004ac8: f8dfc0ef jal ra,80001a54 +80004acc: 86a1a823 sw a0,-1936(gp) # 80009410 + event_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_reverse_order, get_event_time, +80004ad0: ffffd817 auipc a6,0xffffd +80004ad4: a4c80813 addi a6,a6,-1460 # 8000151c +80004ad8: ffffd797 auipc a5,0xffffd +80004adc: 9e878793 addi a5,a5,-1560 # 800014c0 +80004ae0: ffffd717 auipc a4,0xffffd +80004ae4: a2870713 addi a4,a4,-1496 # 80001508 +80004ae8: ffffd697 auipc a3,0xffffd +80004aec: a1068693 addi a3,a3,-1520 # 800014f8 +80004af0: ffffd617 auipc a2,0xffffd +80004af4: 9f060613 addi a2,a2,-1552 # 800014e0 +80004af8: ffffd597 auipc a1,0xffffd +80004afc: 9a058593 addi a1,a1,-1632 # 80001498 +80004b00: 00a00513 li a0,10 +80004b04: f51fc0ef jal ra,80001a54 +80004b08: 86a1aa23 sw a0,-1932(gp) # 80009414 + recycle_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b0c: ffffd817 auipc a6,0xffffd +80004b10: a1080813 addi a6,a6,-1520 # 8000151c +80004b14: ffffd797 auipc a5,0xffffd +80004b18: 9ac78793 addi a5,a5,-1620 # 800014c0 +80004b1c: ffffd717 auipc a4,0xffffd +80004b20: 9ec70713 addi a4,a4,-1556 # 80001508 +80004b24: ffffd697 auipc a3,0xffffd +80004b28: 9d468693 addi a3,a3,-1580 # 800014f8 +80004b2c: ffffd617 auipc a2,0xffffd +80004b30: 9b460613 addi a2,a2,-1612 # 800014e0 +80004b34: ffffd597 auipc a1,0xffffd +80004b38: 98458593 addi a1,a1,-1660 # 800014b8 +80004b3c: 00a00513 li a0,10 +80004b40: f15fc0ef jal ra,80001a54 +80004b44: 86a1a623 sw a0,-1940(gp) # 8000940c + next_q = pqueue_init(INITIAL_EVENT_QUEUE_SIZE, in_no_particular_order, get_event_time, +80004b48: ffffd817 auipc a6,0xffffd +80004b4c: 9d480813 addi a6,a6,-1580 # 8000151c +80004b50: ffffd797 auipc a5,0xffffd +80004b54: 97078793 addi a5,a5,-1680 # 800014c0 +80004b58: ffffd717 auipc a4,0xffffd +80004b5c: 9b070713 addi a4,a4,-1616 # 80001508 +80004b60: ffffd697 auipc a3,0xffffd +80004b64: 99868693 addi a3,a3,-1640 # 800014f8 +80004b68: ffffd617 auipc a2,0xffffd +80004b6c: 97860613 addi a2,a2,-1672 # 800014e0 +80004b70: ffffd597 auipc a1,0xffffd +80004b74: 94858593 addi a1,a1,-1720 # 800014b8 +80004b78: 00a00513 li a0,10 +80004b7c: ed9fc0ef jal ra,80001a54 +80004b80: 86a1a423 sw a0,-1944(gp) # 80009408 + __initialize_trigger_objects(); +80004b84: ae5ff0ef jal ra,80004668 <__initialize_trigger_objects> + clock_gettime(CLOCK_REALTIME, &actualStartTime); +80004b88: 01810593 addi a1,sp,24 +80004b8c: 00100513 li a0,1 +80004b90: ddcfe0ef jal ra,8000316c + physical_start_time = actualStartTime.tv_sec * BILLION + actualStartTime.tv_nsec; +80004b94: 01812703 lw a4,24(sp) +80004b98: 41f75693 srai a3,a4,0x1f +80004b9c: 3b9ad637 lui a2,0x3b9ad +80004ba0: a0060613 addi a2,a2,-1536 # 3b9aca00 +80004ba4: 02c686b3 mul a3,a3,a2 +80004ba8: 02c707b3 mul a5,a4,a2 +80004bac: 02c73733 mulhu a4,a4,a2 +80004bb0: 00e686b3 add a3,a3,a4 +80004bb4: 01c12703 lw a4,28(sp) +80004bb8: 41f75613 srai a2,a4,0x1f +80004bbc: 00e78733 add a4,a5,a4 +80004bc0: 00f737b3 sltu a5,a4,a5 +80004bc4: 00c686b3 add a3,a3,a2 +80004bc8: 00d787b3 add a5,a5,a3 +80004bcc: 82818693 addi a3,gp,-2008 # 800093c8 +80004bd0: 00e6a023 sw a4,0(a3) +80004bd4: 00f6a223 sw a5,4(a3) + current_tag.time = physical_start_time; +80004bd8: 8d818693 addi a3,gp,-1832 # 80009478 +80004bdc: 00e6a023 sw a4,0(a3) +80004be0: 00f6a223 sw a5,4(a3) + start_time = current_tag.time; +80004be4: 82018693 addi a3,gp,-2016 # 800093c0 +80004be8: 00e6a023 sw a4,0(a3) +80004bec: 00f6a223 sw a5,4(a3) + if (duration >= 0LL) { +80004bf0: 81818613 addi a2,gp,-2024 # 800093b8 +80004bf4: 00062683 lw a3,0(a2) +80004bf8: 00462603 lw a2,4(a2) +80004bfc: 02064863 bltz a2,80004c2c + _lf_set_stop_tag((tag_t) {.time = current_tag.time + duration, .microstep = 0}); +80004c00: 00d706b3 add a3,a4,a3 +80004c04: 00e6b733 sltu a4,a3,a4 +80004c08: 00c787b3 add a5,a5,a2 +80004c0c: 00f70733 add a4,a4,a5 +80004c10: 00d12023 sw a3,0(sp) +80004c14: 00e12223 sw a4,4(sp) +80004c18: 00012423 sw zero,8(sp) +80004c1c: 02c12783 lw a5,44(sp) +80004c20: 00f12623 sw a5,12(sp) +80004c24: 00010513 mv a0,sp +80004c28: a78fd0ef jal ra,80001ea0 <_lf_set_stop_tag> +} +80004c2c: 03c12083 lw ra,60(sp) +80004c30: 04010113 addi sp,sp,64 +80004c34: 00008067 ret + +80004c38 <__trigger_startup_reactions>: +80004c38: ff010113 addi sp,sp,-16 +80004c3c: 00112623 sw ra,12(sp) +80004c40: 00812423 sw s0,8(sp) +80004c44: 00000413 li s0,0 +80004c48: 00004797 auipc a5,0x4 +80004c4c: 76078793 addi a5,a5,1888 # 800093a8 <__startup_reactions_size> +80004c50: 0007a783 lw a5,0(a5) +80004c54: 00f44a63 blt s0,a5,80004c68 <__trigger_startup_reactions+0x30> +80004c58: 00c12083 lw ra,12(sp) +80004c5c: 00812403 lw s0,8(sp) +80004c60: 01010113 addi sp,sp,16 +80004c64: 00008067 ret +80004c68: 00241713 slli a4,s0,0x2 +80004c6c: 84818793 addi a5,gp,-1976 # 800093e8 <__startup_reactions> +80004c70: 00e787b3 add a5,a5,a4 +80004c74: 0007a503 lw a0,0(a5) +80004c78: 00050463 beqz a0,80004c80 <__trigger_startup_reactions+0x48> +80004c7c: 824ff0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004c80: 00140413 addi s0,s0,1 +80004c84: fc5ff06f j 80004c48 <__trigger_startup_reactions+0x10> + +80004c88 <__initialize_timers>: +80004c88: ff010113 addi sp,sp,-16 +80004c8c: 00112623 sw ra,12(sp) +80004c90: 00812423 sw s0,8(sp) +80004c94: 00000413 li s0,0 +80004c98: 80c18793 addi a5,gp,-2036 # 800093ac <__timer_triggers_size> +80004c9c: 0007a783 lw a5,0(a5) +80004ca0: 00f44a63 blt s0,a5,80004cb4 <__initialize_timers+0x2c> +80004ca4: 00c12083 lw ra,12(sp) +80004ca8: 00812403 lw s0,8(sp) +80004cac: 01010113 addi sp,sp,16 +80004cb0: 00008067 ret +80004cb4: 00241713 slli a4,s0,0x2 +80004cb8: 84c18793 addi a5,gp,-1972 # 800093ec <__timer_triggers> +80004cbc: 00e787b3 add a5,a5,a4 +80004cc0: 0007a503 lw a0,0(a5) +80004cc4: 00050463 beqz a0,80004ccc <__initialize_timers+0x44> +80004cc8: 820ff0ef jal ra,80003ce8 <_lf_initialize_timer> +80004ccc: 00140413 addi s0,s0,1 +80004cd0: fc9ff06f j 80004c98 <__initialize_timers+0x10> + +80004cd4 : +80004cd4: 00008067 ret + +80004cd8 : +80004cd8: 00b52023 sw a1,0(a0) +80004cdc: 00c52223 sw a2,4(a0) +80004ce0: 00d52423 sw a3,8(a0) +80004ce4: 00008067 ret + +80004ce8 <__trigger_shutdown_reactions>: +80004ce8: ff010113 addi sp,sp,-16 +80004cec: 00112623 sw ra,12(sp) +80004cf0: 00812423 sw s0,8(sp) +80004cf4: 00000413 li s0,0 +80004cf8: 0080006f j 80004d00 <__trigger_shutdown_reactions+0x18> +80004cfc: 00140413 addi s0,s0,1 +80004d00: 00004797 auipc a5,0x4 +80004d04: 6e078793 addi a5,a5,1760 # 800093e0 <__shutdown_reactions_size> +80004d08: 0007a503 lw a0,0(a5) +80004d0c: 02a45263 ble a0,s0,80004d30 <__trigger_shutdown_reactions+0x48> +80004d10: 84418793 addi a5,gp,-1980 # 800093e4 <__shutdown_reactions> +80004d14: 0007a783 lw a5,0(a5) +80004d18: 00241713 slli a4,s0,0x2 +80004d1c: 00e787b3 add a5,a5,a4 +80004d20: 0007a503 lw a0,0(a5) +80004d24: fc050ce3 beqz a0,80004cfc <__trigger_shutdown_reactions+0x14> +80004d28: f79fe0ef jal ra,80003ca0 <_lf_enqueue_reaction> +80004d2c: fd1ff06f j 80004cfc <__trigger_shutdown_reactions+0x14> +80004d30: 00a02533 sgtz a0,a0 +80004d34: 00c12083 lw ra,12(sp) +80004d38: 00812403 lw s0,8(sp) +80004d3c: 01010113 addi sp,sp,16 +80004d40: 00008067 ret + +80004d44 : +int next() { +80004d44: fb010113 addi sp,sp,-80 +80004d48: 04112623 sw ra,76(sp) +80004d4c: 04812423 sw s0,72(sp) +80004d50: 04912223 sw s1,68(sp) + event_t* event = (event_t*)pqueue_peek(event_q); +80004d54: 87418793 addi a5,gp,-1932 # 80009414 +80004d58: 0007a503 lw a0,0(a5) +80004d5c: 830fd0ef jal ra,80001d8c + tag_t next_tag = { .time = LLONG_MAX, .microstep = UINT_MAX}; +80004d60: 00003797 auipc a5,0x3 +80004d64: 75078793 addi a5,a5,1872 # 800084b0 <__ascii_wctomb+0x34> +80004d68: 0007a603 lw a2,0(a5) +80004d6c: 0047a683 lw a3,4(a5) +80004d70: 0087a703 lw a4,8(a5) +80004d74: 00c7a783 lw a5,12(a5) +80004d78: 02c12023 sw a2,32(sp) +80004d7c: 02d12223 sw a3,36(sp) +80004d80: 02e12423 sw a4,40(sp) +80004d84: 02f12623 sw a5,44(sp) + if (event == NULL) { +80004d88: 0a050663 beqz a0,80004e34 + next_tag.time = event->time; +80004d8c: 00052783 lw a5,0(a0) +80004d90: 00452683 lw a3,4(a0) +80004d94: 02f12023 sw a5,32(sp) +80004d98: 02d12223 sw a3,36(sp) + if (next_tag.time == current_tag.time) { +80004d9c: 8d818713 addi a4,gp,-1832 # 80009478 +80004da0: 00072603 lw a2,0(a4) +80004da4: 00472703 lw a4,4(a4) +80004da8: 0cc78a63 beq a5,a2,80004e7c + next_tag.microstep = 0; +80004dac: 02012423 sw zero,40(sp) + if (_lf_is_tag_after_stop_tag(next_tag)) { +80004db0: 02012783 lw a5,32(sp) +80004db4: 00f12823 sw a5,16(sp) +80004db8: 02412783 lw a5,36(sp) +80004dbc: 00f12a23 sw a5,20(sp) +80004dc0: 02812783 lw a5,40(sp) +80004dc4: 00f12c23 sw a5,24(sp) +80004dc8: 02c12783 lw a5,44(sp) +80004dcc: 00f12e23 sw a5,28(sp) +80004dd0: 01010513 addi a0,sp,16 +80004dd4: e44fd0ef jal ra,80002418 <_lf_is_tag_after_stop_tag> +80004dd8: 02050663 beqz a0,80004e04 + next_tag = stop_tag; +80004ddc: 00004797 auipc a5,0x4 +80004de0: c1478793 addi a5,a5,-1004 # 800089f0 +80004de4: 0007a603 lw a2,0(a5) +80004de8: 0047a683 lw a3,4(a5) +80004dec: 0087a703 lw a4,8(a5) +80004df0: 00c7a783 lw a5,12(a5) +80004df4: 02c12023 sw a2,32(sp) +80004df8: 02d12223 sw a3,36(sp) +80004dfc: 02e12423 sw a4,40(sp) +80004e00: 02f12623 sw a5,44(sp) + if (wait_until(next_tag.time) != 0) { +80004e04: 02012403 lw s0,32(sp) +80004e08: 02412483 lw s1,36(sp) +80004e0c: 00040513 mv a0,s0 +80004e10: 00048593 mv a1,s1 +80004e14: dc1fe0ef jal ra,80003bd4 +80004e18: 06050c63 beqz a0,80004e90 + return 1; +80004e1c: 00100513 li a0,1 +} +80004e20: 04c12083 lw ra,76(sp) +80004e24: 04812403 lw s0,72(sp) +80004e28: 04412483 lw s1,68(sp) +80004e2c: 05010113 addi sp,sp,80 +80004e30: 00008067 ret + if (!keepalive_specified) { // FIXME: validator should issue a warning for unthreaded implementation +80004e34: 89c1c783 lbu a5,-1892(gp) # 8000943c +80004e38: f6079ce3 bnez a5,80004db0 + _lf_set_stop_tag((tag_t){.time=current_tag.time,.microstep=current_tag.microstep+1}); +80004e3c: 8d818793 addi a5,gp,-1832 # 80009478 +80004e40: 0007a703 lw a4,0(a5) +80004e44: 0047a683 lw a3,4(a5) +80004e48: 02e12823 sw a4,48(sp) +80004e4c: 02d12a23 sw a3,52(sp) +80004e50: 0087a783 lw a5,8(a5) +80004e54: 00178793 addi a5,a5,1 +80004e58: 02f12c23 sw a5,56(sp) +80004e5c: 00e12823 sw a4,16(sp) +80004e60: 00d12a23 sw a3,20(sp) +80004e64: 00f12c23 sw a5,24(sp) +80004e68: 03c12783 lw a5,60(sp) +80004e6c: 00f12e23 sw a5,28(sp) +80004e70: 01010513 addi a0,sp,16 +80004e74: 82cfd0ef jal ra,80001ea0 <_lf_set_stop_tag> +80004e78: f39ff06f j 80004db0 + if (next_tag.time == current_tag.time) { +80004e7c: f2e698e3 bne a3,a4,80004dac + next_tag.microstep = get_microstep() + 1; +80004e80: 941fc0ef jal ra,800017c0 +80004e84: 00150513 addi a0,a0,1 +80004e88: 02a12423 sw a0,40(sp) +80004e8c: f25ff06f j 80004db0 + _lf_advance_logical_time(next_tag.time); +80004e90: 00040513 mv a0,s0 +80004e94: 00048593 mv a1,s1 +80004e98: c81fd0ef jal ra,80002b18 <_lf_advance_logical_time> + if (compare_tags(current_tag, stop_tag) >= 0) { +80004e9c: 8d818793 addi a5,gp,-1832 # 80009478 +80004ea0: 0007a603 lw a2,0(a5) +80004ea4: 0047a683 lw a3,4(a5) +80004ea8: 0087a703 lw a4,8(a5) +80004eac: 00c7a783 lw a5,12(a5) +80004eb0: 00c12823 sw a2,16(sp) +80004eb4: 00d12a23 sw a3,20(sp) +80004eb8: 00e12c23 sw a4,24(sp) +80004ebc: 00f12e23 sw a5,28(sp) +80004ec0: 00004797 auipc a5,0x4 +80004ec4: b3078793 addi a5,a5,-1232 # 800089f0 +80004ec8: 0007a603 lw a2,0(a5) +80004ecc: 0047a683 lw a3,4(a5) +80004ed0: 0087a703 lw a4,8(a5) +80004ed4: 00c7a783 lw a5,12(a5) +80004ed8: 00c12023 sw a2,0(sp) +80004edc: 00d12223 sw a3,4(sp) +80004ee0: 00e12423 sw a4,8(sp) +80004ee4: 00f12623 sw a5,12(sp) +80004ee8: 00010593 mv a1,sp +80004eec: 01010513 addi a0,sp,16 +80004ef0: fc4fc0ef jal ra,800016b4 +80004ef4: 00055a63 bgez a0,80004f08 + __start_time_step(); +80004ef8: 980fd0ef jal ra,80002078 <__start_time_step> + __pop_events(); +80004efc: f2cfe0ef jal ra,80003628 <__pop_events> + return _lf_do_step(); +80004f00: 8b4ff0ef jal ra,80003fb4 <_lf_do_step> +80004f04: f1dff06f j 80004e20 + __trigger_shutdown_reactions(); +80004f08: de1ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004f0c: fedff06f j 80004ef8 + +80004f10
: + +int main(int argc, char* argv[]) { +80004f10: fd010113 addi sp,sp,-48 +80004f14: 02112623 sw ra,44(sp) +80004f18: 02812423 sw s0,40(sp) +80004f1c: 02912223 sw s1,36(sp) +80004f20: 00050413 mv s0,a0 +80004f24: 00058493 mv s1,a1 + // Invoke the function that optionally provides default command-line options. + __set_default_command_line_options(); + + if (process_args(default_argc, default_argv) +80004f28: 85018793 addi a5,gp,-1968 # 800093f0 +80004f2c: 0007a583 lw a1,0(a5) +80004f30: 85418793 addi a5,gp,-1964 # 800093f4 +80004f34: 0007a503 lw a0,0(a5) +80004f38: cedfd0ef jal ra,80002c24 +80004f3c: 0a050a63 beqz a0,80004ff0 + && process_args(argc, argv)) { +80004f40: 00048593 mv a1,s1 +80004f44: 00040513 mv a0,s0 +80004f48: cddfd0ef jal ra,80002c24 +80004f4c: 0a050263 beqz a0,80004ff0 + initialize(); +80004f50: b35ff0ef jal ra,80004a84 + _lf_execution_started = true; +80004f54: 00100793 li a5,1 +80004f58: 88f18ea3 sb a5,-1891(gp) # 8000943d <_lf_execution_started> + __trigger_startup_reactions(); +80004f5c: cddff0ef jal ra,80004c38 <__trigger_startup_reactions> + __initialize_timers(); +80004f60: d29ff0ef jal ra,80004c88 <__initialize_timers> + // If the stop_tag is (0,0), also insert the shutdown + // reactions. This can only happen if the timeout time + // was set to 0. + if (compare_tags(current_tag, stop_tag) >= 0) { +80004f64: 8d818793 addi a5,gp,-1832 # 80009478 +80004f68: 0007a603 lw a2,0(a5) +80004f6c: 0047a683 lw a3,4(a5) +80004f70: 0087a703 lw a4,8(a5) +80004f74: 00c7a783 lw a5,12(a5) +80004f78: 00c12823 sw a2,16(sp) +80004f7c: 00d12a23 sw a3,20(sp) +80004f80: 00e12c23 sw a4,24(sp) +80004f84: 00f12e23 sw a5,28(sp) +80004f88: 00004797 auipc a5,0x4 +80004f8c: a6878793 addi a5,a5,-1432 # 800089f0 +80004f90: 0007a603 lw a2,0(a5) +80004f94: 0047a683 lw a3,4(a5) +80004f98: 0087a703 lw a4,8(a5) +80004f9c: 00c7a783 lw a5,12(a5) +80004fa0: 00c12023 sw a2,0(sp) +80004fa4: 00d12223 sw a3,4(sp) +80004fa8: 00e12423 sw a4,8(sp) +80004fac: 00f12623 sw a5,12(sp) +80004fb0: 00010593 mv a1,sp +80004fb4: 01010513 addi a0,sp,16 +80004fb8: efcfc0ef jal ra,800016b4 +80004fbc: 02055663 bgez a0,80004fe8 + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); + } + // Handle reactions triggered at time (T,m). + if (_lf_do_step()) { +80004fc0: ff5fe0ef jal ra,80003fb4 <_lf_do_step> +80004fc4: 00050663 beqz a0,80004fd0 + while (next() != 0); +80004fc8: d7dff0ef jal ra,80004d44 +80004fcc: fe051ee3 bnez a0,80004fc8 + } + termination(); + // __spike_return(0); + return 0; +80004fd0: 00000513 li a0,0 + // printf("DEBUG: invoking termination.\n"); + termination(); + // __spike_return(1); + return -1; + } +} +80004fd4: 02c12083 lw ra,44(sp) +80004fd8: 02812403 lw s0,40(sp) +80004fdc: 02412483 lw s1,36(sp) +80004fe0: 03010113 addi sp,sp,48 +80004fe4: 00008067 ret + __trigger_shutdown_reactions(); // __trigger_shutdown_reactions(); +80004fe8: d01ff0ef jal ra,80004ce8 <__trigger_shutdown_reactions> +80004fec: fd5ff06f j 80004fc0 + return -1; +80004ff0: fff00513 li a0,-1 +80004ff4: fe1ff06f j 80004fd4 + +80004ff8 <__termination>: +80004ff8: 00008067 ret + +80004ffc : + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +} + +static unsigned long long getuint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80004ffc: 00100793 li a5,1 +80005000: 02b7d263 ble a1,a5,80005024 + return va_arg(*ap, unsigned long long); +80005004: 00052783 lw a5,0(a0) +80005008: 00778793 addi a5,a5,7 +8000500c: ff87f793 andi a5,a5,-8 +80005010: 00878713 addi a4,a5,8 +80005014: 00e52023 sw a4,0(a0) +80005018: 0007a503 lw a0,0(a5) +8000501c: 0047a583 lw a1,4(a5) +80005020: 00008067 ret + else if (lflag) +80005024: 00059e63 bnez a1,80005040 + return va_arg(*ap, unsigned long); + else + return va_arg(*ap, unsigned int); +80005028: 00052783 lw a5,0(a0) +8000502c: 00478713 addi a4,a5,4 +80005030: 00e52023 sw a4,0(a0) +80005034: 0007a503 lw a0,0(a5) +80005038: 00000593 li a1,0 +} +8000503c: 00008067 ret + return va_arg(*ap, unsigned long); +80005040: 00052783 lw a5,0(a0) +80005044: 00478713 addi a4,a5,4 +80005048: 00e52023 sw a4,0(a0) +8000504c: 0007a503 lw a0,0(a5) +80005050: 00000593 li a1,0 +80005054: 00008067 ret + +80005058 : + +static long long getint(va_list *ap, int lflag) +{ + if (lflag >= 2) +80005058: 00100793 li a5,1 +8000505c: 02b7d263 ble a1,a5,80005080 + return va_arg(*ap, long long); +80005060: 00052783 lw a5,0(a0) +80005064: 00778793 addi a5,a5,7 +80005068: ff87f793 andi a5,a5,-8 +8000506c: 00878713 addi a4,a5,8 +80005070: 00e52023 sw a4,0(a0) +80005074: 0007a503 lw a0,0(a5) +80005078: 0047a583 lw a1,4(a5) +8000507c: 00008067 ret + else if (lflag) +80005080: 00059e63 bnez a1,8000509c + return va_arg(*ap, long); + else + return va_arg(*ap, int); +80005084: 00052783 lw a5,0(a0) +80005088: 00478713 addi a4,a5,4 +8000508c: 00e52023 sw a4,0(a0) +80005090: 0007a503 lw a0,0(a5) +80005094: 41f55593 srai a1,a0,0x1f +} +80005098: 00008067 ret + return va_arg(*ap, long); +8000509c: 00052783 lw a5,0(a0) +800050a0: 00478713 addi a4,a5,4 +800050a4: 00e52023 sw a4,0(a0) +800050a8: 0007a503 lw a0,0(a5) +800050ac: 41f55593 srai a1,a0,0x1f +800050b0: 00008067 ret + +800050b4 : + va_start(ap, fmt); + + void sprintf_putch(int ch, void** data) + { + char** pstr = (char**)data; + **pstr = ch; +800050b4: 0005a783 lw a5,0(a1) +800050b8: 00a78023 sb a0,0(a5) + (*pstr)++; +800050bc: 0005a783 lw a5,0(a1) +800050c0: 00178793 addi a5,a5,1 +800050c4: 00f5a023 sw a5,0(a1) + } +800050c8: 00008067 ret + +800050cc : +{ +800050cc: f8010113 addi sp,sp,-128 +800050d0: 00060e93 mv t4,a2 +800050d4: 00070393 mv t2,a4 +800050d8: 00080893 mv a7,a6 +800050dc: 00078813 mv a6,a5 +800050e0: 03f10613 addi a2,sp,63 +800050e4: fc067613 andi a2,a2,-64 + magic_mem[0] = which; +800050e8: 00000793 li a5,0 +800050ec: 00a62023 sw a0,0(a2) +800050f0: 00f62223 sw a5,4(a2) + magic_mem[1] = arg0; +800050f4: 00b62423 sw a1,8(a2) +800050f8: 01d62623 sw t4,12(a2) + magic_mem[2] = arg1; +800050fc: 00d62823 sw a3,16(a2) +80005100: 00762a23 sw t2,20(a2) + magic_mem[3] = arg2; +80005104: 01062c23 sw a6,24(a2) +80005108: 01162e23 sw a7,28(a2) + __sync_synchronize(); +8000510c: 0ff0000f fence + tohost = (uintptr_t)magic_mem; +80005110: 00000793 li a5,0 +80005114: ffffc697 auipc a3,0xffffc +80005118: eec68693 addi a3,a3,-276 # 80001000 +8000511c: 00c6a023 sw a2,0(a3) +80005120: 00f6a223 sw a5,4(a3) + while (fromhost == 0) +80005124: ffffc797 auipc a5,0xffffc +80005128: f1c78793 addi a5,a5,-228 # 80001040 +8000512c: 0007a703 lw a4,0(a5) +80005130: 0047a783 lw a5,4(a5) +80005134: 00f76733 or a4,a4,a5 +80005138: fe0706e3 beqz a4,80005124 + fromhost = 0; +8000513c: ffffc797 auipc a5,0xffffc +80005140: f0478793 addi a5,a5,-252 # 80001040 +80005144: 00000693 li a3,0 +80005148: 00000713 li a4,0 +8000514c: 00d7a023 sw a3,0(a5) +80005150: 00e7a223 sw a4,4(a5) + __sync_synchronize(); +80005154: 0ff0000f fence + return magic_mem[0]; +80005158: 00062503 lw a0,0(a2) +8000515c: 00462583 lw a1,4(a2) +} +80005160: 08010113 addi sp,sp,128 +80005164: 00008067 ret + +80005168 : + buf[buflen++] = ch; +80005168: 00022703 lw a4,0(tp) # 0 +8000516c: 00170813 addi a6,a4,1 +80005170: 01022023 sw a6,0(tp) # 0 +80005174: 04020793 addi a5,tp,64 # 40 +80005178: 00f707b3 add a5,a4,a5 +8000517c: 00a78023 sb a0,0(a5) + if (ch == '\n' || buflen == sizeof(buf)) +80005180: 00a00793 li a5,10 +80005184: 00f50a63 beq a0,a5,80005198 +80005188: 00400793 li a5,4 +8000518c: 00f80663 beq a6,a5,80005198 +} +80005190: 00000513 li a0,0 +80005194: 00008067 ret +{ +80005198: ff010113 addi sp,sp,-16 +8000519c: 00112623 sw ra,12(sp) + syscall(SYS_write, 1, (uintptr_t)buf, buflen); +800051a0: 00080793 mv a5,a6 +800051a4: 41f85813 srai a6,a6,0x1f +800051a8: 04020693 addi a3,tp,64 # 40 +800051ac: 00000713 li a4,0 +800051b0: 00100593 li a1,1 +800051b4: 00000613 li a2,0 +800051b8: 04000513 li a0,64 +800051bc: f11ff0ef jal ra,800050cc + buflen = 0; +800051c0: 00022023 sw zero,0(tp) # 0 +} +800051c4: 00000513 li a0,0 +800051c8: 00c12083 lw ra,12(sp) +800051cc: 01010113 addi sp,sp,16 +800051d0: 00008067 ret + +800051d4 : + READ_CTR(mcycle); +800051d4: b00027f3 csrr a5,mcycle +800051d8: 00051e63 bnez a0,800051f4 +800051dc: 8bc18713 addi a4,gp,-1860 # 8000945c +800051e0: 00072703 lw a4,0(a4) +800051e4: 40e787b3 sub a5,a5,a4 +800051e8: 00003717 auipc a4,0x3 +800051ec: 76470713 addi a4,a4,1892 # 8000894c <_ctype_+0x1f8> +800051f0: 8ae1aa23 sw a4,-1868(gp) # 80009454 +800051f4: 8af1ae23 sw a5,-1860(gp) # 8000945c + READ_CTR(minstret); +800051f8: b02027f3 csrr a5,minstret +800051fc: 00051e63 bnez a0,80005218 +80005200: 8bc18713 addi a4,gp,-1860 # 8000945c +80005204: 00472703 lw a4,4(a4) +80005208: 40e787b3 sub a5,a5,a4 +8000520c: 00003717 auipc a4,0x3 +80005210: 74870713 addi a4,a4,1864 # 80008954 <_ctype_+0x200> +80005214: 8ae1ac23 sw a4,-1864(gp) # 80009458 +80005218: 8cf1a023 sw a5,-1856(gp) # 80009460 +} +8000521c: 00008067 ret + +80005220 : + tohost = (code << 1) | 1; +80005220: 00151513 slli a0,a0,0x1 +80005224: 00156713 ori a4,a0,1 +80005228: 00000793 li a5,0 +8000522c: ffffc697 auipc a3,0xffffc +80005230: dd468693 addi a3,a3,-556 # 80001000 +80005234: 00e6a023 sw a4,0(a3) +80005238: 00f6a223 sw a5,4(a3) +8000523c: 0000006f j 8000523c + +80005240 : +{ +80005240: ff010113 addi sp,sp,-16 +80005244: 00112623 sw ra,12(sp) + tohost_exit(1337); +80005248: 53900513 li a0,1337 +8000524c: fd5ff0ef jal ra,80005220 + +80005250 : +{ +80005250: ff010113 addi sp,sp,-16 +80005254: 00112623 sw ra,12(sp) + tohost_exit(code); +80005258: fc9ff0ef jal ra,80005220 + +8000525c : +{ +8000525c: ff010113 addi sp,sp,-16 +80005260: 00112623 sw ra,12(sp) + exit(128 + SIGABRT); +80005264: 08600513 li a0,134 +80005268: fe9ff0ef jal ra,80005250 + +8000526c : + while (cid != 0); +8000526c: 00051063 bnez a0,8000526c +} +80005270: 00008067 ret + +80005274 : + return str - str0; +} + +void* memcpy(void* dest, const void* src, size_t len) +{ + if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { +80005274: 00b567b3 or a5,a0,a1 +80005278: 00c7e7b3 or a5,a5,a2 +8000527c: 0037f793 andi a5,a5,3 +80005280: 02078463 beqz a5,800052a8 + uintptr_t *d = dest; + while (d < (uintptr_t*)(dest + len)) + *d++ = *s++; + } else { + const char* s = src; + char *d = dest; +80005284: 00050793 mv a5,a0 +80005288: 0380006f j 800052c0 + *d++ = *s++; +8000528c: 0005a703 lw a4,0(a1) +80005290: 00e7a023 sw a4,0(a5) +80005294: 00478793 addi a5,a5,4 +80005298: 00458593 addi a1,a1,4 + while (d < (uintptr_t*)(dest + len)) +8000529c: 00c50733 add a4,a0,a2 +800052a0: fee7e6e3 bltu a5,a4,8000528c +800052a4: 00008067 ret + uintptr_t *d = dest; +800052a8: 00050793 mv a5,a0 +800052ac: ff1ff06f j 8000529c + while (d < (char*)(dest + len)) + *d++ = *s++; +800052b0: 0005c703 lbu a4,0(a1) +800052b4: 00e78023 sb a4,0(a5) +800052b8: 00178793 addi a5,a5,1 +800052bc: 00158593 addi a1,a1,1 + while (d < (char*)(dest + len)) +800052c0: 00c50733 add a4,a0,a2 +800052c4: fee7e6e3 bltu a5,a4,800052b0 + } + return dest; +} +800052c8: 00008067 ret + +800052cc : + +void* memset(void* dest, int byte, size_t len) +{ + if ((((uintptr_t)dest | len) & (sizeof(uintptr_t)-1)) == 0) { +800052cc: 00c567b3 or a5,a0,a2 +800052d0: 0037f793 andi a5,a5,3 +800052d4: 04079463 bnez a5,8000531c + uintptr_t word = byte & 0xFF; +800052d8: 0ff5f593 andi a1,a1,255 + word |= word << 8; +800052dc: 00859793 slli a5,a1,0x8 +800052e0: 00b7e7b3 or a5,a5,a1 + word |= word << 16; +800052e4: 01079593 slli a1,a5,0x10 +800052e8: 00f5e5b3 or a1,a1,a5 + word |= word << 16 << 16; + + uintptr_t *d = dest; +800052ec: 00050793 mv a5,a0 + while (d < (uintptr_t*)(dest + len)) +800052f0: 00c0006f j 800052fc + *d++ = word; +800052f4: 00b7a023 sw a1,0(a5) +800052f8: 00478793 addi a5,a5,4 + while (d < (uintptr_t*)(dest + len)) +800052fc: 00c50733 add a4,a0,a2 +80005300: fee7eae3 bltu a5,a4,800052f4 +80005304: 00008067 ret + } else { + char *d = dest; + while (d < (char*)(dest + len)) + *d++ = byte; +80005308: 00b78023 sb a1,0(a5) +8000530c: 00178793 addi a5,a5,1 + while (d < (char*)(dest + len)) +80005310: 00c50733 add a4,a0,a2 +80005314: fee7eae3 bltu a5,a4,80005308 + } + return dest; +} +80005318: 00008067 ret + char *d = dest; +8000531c: 00050793 mv a5,a0 +80005320: ff1ff06f j 80005310 + +80005324 : +{ +80005324: ff010113 addi sp,sp,-16 +80005328: 00112623 sw ra,12(sp) +8000532c: 00812423 sw s0,8(sp) +80005330: 00912223 sw s1,4(sp) +80005334: 01212023 sw s2,0(sp) + size_t tdata_size = &_tdata_end - &_tdata_begin; +80005338: 91418493 addi s1,gp,-1772 # 800094b4 <_tdata_begin> +8000533c: 91418593 addi a1,gp,-1772 # 800094b4 <_tdata_begin> +80005340: 40b48433 sub s0,s1,a1 + memcpy(thread_pointer, &_tdata_begin, tdata_size); +80005344: 00020913 mv s2,tp +80005348: 00040613 mv a2,s0 +8000534c: 00020513 mv a0,tp +80005350: f25ff0ef jal ra,80005274 + memset(thread_pointer + tdata_size, 0, tbss_size); +80005354: 96418613 addi a2,gp,-1692 # 80009504 <_tbss_end> +80005358: 40960633 sub a2,a2,s1 +8000535c: 00000593 li a1,0 +80005360: 00890533 add a0,s2,s0 +80005364: f69ff0ef jal ra,800052cc +} +80005368: 00c12083 lw ra,12(sp) +8000536c: 00812403 lw s0,8(sp) +80005370: 00412483 lw s1,4(sp) +80005374: 00012903 lw s2,0(sp) +80005378: 01010113 addi sp,sp,16 +8000537c: 00008067 ret + +80005380 : + +size_t strlen(const char *s) +{ + const char *p = s; +80005380: 00050793 mv a5,a0 + while (*p) +80005384: 0080006f j 8000538c + p++; +80005388: 00178793 addi a5,a5,1 + while (*p) +8000538c: 0007c703 lbu a4,0(a5) +80005390: fe071ce3 bnez a4,80005388 + return p - s; +} +80005394: 40a78533 sub a0,a5,a0 +80005398: 00008067 ret + +8000539c : +{ +8000539c: ff010113 addi sp,sp,-16 +800053a0: 00112623 sw ra,12(sp) +800053a4: 00812423 sw s0,8(sp) +800053a8: 00050413 mv s0,a0 + syscall(SYS_write, 1, (uintptr_t)s, strlen(s)); +800053ac: fd5ff0ef jal ra,80005380 +800053b0: 00050793 mv a5,a0 +800053b4: 00000813 li a6,0 +800053b8: 00040693 mv a3,s0 +800053bc: 00000713 li a4,0 +800053c0: 00100593 li a1,1 +800053c4: 00000613 li a2,0 +800053c8: 04000513 li a0,64 +800053cc: d01ff0ef jal ra,800050cc +} +800053d0: 00c12083 lw ra,12(sp) +800053d4: 00812403 lw s0,8(sp) +800053d8: 01010113 addi sp,sp,16 +800053dc: 00008067 ret +{ +800053e0: ff010113 addi sp,sp,-16 +800053e4: 00112623 sw ra,12(sp) + printstr("main() is not found.\n"); +800053e8: 00003517 auipc a0,0x3 +800053ec: 57850513 addi a0,a0,1400 # 80008960 <_ctype_+0x20c> +800053f0: fadff0ef jal ra,8000539c +} +800053f4: fff00513 li a0,-1 +800053f8: 00c12083 lw ra,12(sp) +800053fc: 01010113 addi sp,sp,16 +80005400: 00008067 ret + +80005404 : +{ +80005404: fd010113 addi sp,sp,-48 +80005408: 02112623 sw ra,44(sp) + for (i = 0; i < 16; i++) +8000540c: 00000713 li a4,0 +80005410: 0340006f j 80005444 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +80005414: 05700613 li a2,87 +80005418: 00f00793 li a5,15 +8000541c: 40e787b3 sub a5,a5,a4 +80005420: 00c686b3 add a3,a3,a2 +80005424: 02010613 addi a2,sp,32 +80005428: 00f607b3 add a5,a2,a5 +8000542c: fed78623 sb a3,-20(a5) + x >>= 4; +80005430: 01c59793 slli a5,a1,0x1c +80005434: 00455513 srli a0,a0,0x4 +80005438: 00a7e533 or a0,a5,a0 +8000543c: 0045d593 srli a1,a1,0x4 + for (i = 0; i < 16; i++) +80005440: 00170713 addi a4,a4,1 +80005444: 00f00793 li a5,15 +80005448: 00e7cc63 blt a5,a4,80005460 + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); +8000544c: 00f57693 andi a3,a0,15 +80005450: 00900613 li a2,9 +80005454: fcd660e3 bltu a2,a3,80005414 +80005458: 03000613 li a2,48 +8000545c: fbdff06f j 80005418 + str[16] = 0; +80005460: 00010e23 sb zero,28(sp) + printstr(str); +80005464: 00c10513 addi a0,sp,12 +80005468: f35ff0ef jal ra,8000539c +} +8000546c: 02c12083 lw ra,44(sp) +80005470: 03010113 addi sp,sp,48 +80005474: 00008067 ret + +80005478 : + +size_t strnlen(const char *s, size_t n) +{ + const char *p = s; +80005478: 00050793 mv a5,a0 + while (n-- && *p) +8000547c: 00c0006f j 80005488 + p++; +80005480: 00178793 addi a5,a5,1 + while (n-- && *p) +80005484: 00070593 mv a1,a4 +80005488: fff58713 addi a4,a1,-1 +8000548c: 00058663 beqz a1,80005498 +80005490: 0007c683 lbu a3,0(a5) +80005494: fe0696e3 bnez a3,80005480 + return p - s; +} +80005498: 40a78533 sub a0,a5,a0 +8000549c: 00008067 ret + +800054a0 : +{ +800054a0: ec010113 addi sp,sp,-320 +800054a4: 12112e23 sw ra,316(sp) +800054a8: 12812c23 sw s0,312(sp) +800054ac: 12912a23 sw s1,308(sp) +800054b0: 13212823 sw s2,304(sp) +800054b4: 13312623 sw s3,300(sp) +800054b8: 13412423 sw s4,296(sp) +800054bc: 13512223 sw s5,292(sp) +800054c0: 13612023 sw s6,288(sp) +800054c4: 11712e23 sw s7,284(sp) +800054c8: 11812c23 sw s8,280(sp) +800054cc: 11912a23 sw s9,276(sp) +800054d0: 11a12823 sw s10,272(sp) +800054d4: 00050993 mv s3,a0 +800054d8: 00058913 mv s2,a1 +800054dc: 00060413 mv s0,a2 +800054e0: 00d12623 sw a3,12(sp) + while ((ch = *(unsigned char *) fmt) != '%') { +800054e4: 00044503 lbu a0,0(s0) +800054e8: 02500793 li a5,37 +800054ec: 00f50c63 beq a0,a5,80005504 + if (ch == '\0') +800054f0: 30050c63 beqz a0,80005808 + fmt++; +800054f4: 00140413 addi s0,s0,1 + putch(ch, putdat); +800054f8: 00090593 mv a1,s2 +800054fc: 000980e7 jalr s3 +80005500: fe5ff06f j 800054e4 + fmt++; +80005504: 00140a13 addi s4,s0,1 +80005508: 000a0793 mv a5,s4 + padc = ' '; +8000550c: 02000c93 li s9,32 + precision = -1; +80005510: fff00493 li s1,-1 + width = -1; +80005514: fff00b93 li s7,-1 + lflag = 0; +80005518: 00000593 li a1,0 + switch (ch = *(unsigned char *) fmt++) { +8000551c: 00178413 addi s0,a5,1 +80005520: 0007c503 lbu a0,0(a5) +80005524: fdd50793 addi a5,a0,-35 +80005528: 0ff7f693 andi a3,a5,255 +8000552c: 05500713 li a4,85 +80005530: 2cd76263 bltu a4,a3,800057f4 +80005534: 00269793 slli a5,a3,0x2 +80005538: 00003717 auipc a4,0x3 +8000553c: f8870713 addi a4,a4,-120 # 800084c0 <__ascii_wctomb+0x44> +80005540: 00e787b3 add a5,a5,a4 +80005544: 0007a783 lw a5,0(a5) +80005548: 00e787b3 add a5,a5,a4 +8000554c: 00078067 jr a5 +80005550: 00040793 mv a5,s0 + padc = '-'; +80005554: 02d00c93 li s9,45 +80005558: fc5ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +8000555c: 00040793 mv a5,s0 + padc = '0'; +80005560: 03000c93 li s9,48 +80005564: fb9ff06f j 8000551c + switch (ch = *(unsigned char *) fmt++) { +80005568: 00040793 mv a5,s0 + width = 0; +8000556c: 00000b93 li s7,0 +80005570: fadff06f j 8000551c + base = 10; +80005574: 00a00c13 li s8,10 +80005578: 1a40006f j 8000571c + for (precision = 0; ; ++fmt) { +8000557c: 00000493 li s1,0 + precision = precision * 10 + ch - '0'; +80005580: 00249793 slli a5,s1,0x2 +80005584: 009784b3 add s1,a5,s1 +80005588: 00149793 slli a5,s1,0x1 +8000558c: 00a78533 add a0,a5,a0 +80005590: fd050493 addi s1,a0,-48 + ch = *fmt; +80005594: 00044503 lbu a0,0(s0) + if (ch < '0' || ch > '9') +80005598: fd050713 addi a4,a0,-48 +8000559c: 00900793 li a5,9 +800055a0: 04e7e263 bltu a5,a4,800055e4 + for (precision = 0; ; ++fmt) { +800055a4: 00140413 addi s0,s0,1 + precision = precision * 10 + ch - '0'; +800055a8: fd9ff06f j 80005580 + precision = va_arg(ap, int); +800055ac: 00c12783 lw a5,12(sp) +800055b0: 00478713 addi a4,a5,4 +800055b4: 00e12623 sw a4,12(sp) +800055b8: 0007a483 lw s1,0(a5) + switch (ch = *(unsigned char *) fmt++) { +800055bc: 00040793 mv a5,s0 + if (width < 0) +800055c0: f40bdee3 bgez s7,8000551c + width = precision, precision = -1; +800055c4: 00048b93 mv s7,s1 +800055c8: fff00493 li s1,-1 +800055cc: f51ff06f j 8000551c + if (width < 0) +800055d0: f80bcce3 bltz s7,80005568 + switch (ch = *(unsigned char *) fmt++) { +800055d4: 00040793 mv a5,s0 +800055d8: f45ff06f j 8000551c +800055dc: 00040793 mv a5,s0 + goto reswitch; +800055e0: f3dff06f j 8000551c +800055e4: 00040793 mv a5,s0 +800055e8: fd9ff06f j 800055c0 + lflag++; +800055ec: 00158593 addi a1,a1,1 + switch (ch = *(unsigned char *) fmt++) { +800055f0: 00040793 mv a5,s0 + goto reswitch; +800055f4: f29ff06f j 8000551c + putch(va_arg(ap, int), putdat); +800055f8: 00c12783 lw a5,12(sp) +800055fc: 00478713 addi a4,a5,4 +80005600: 00e12623 sw a4,12(sp) +80005604: 00090593 mv a1,s2 +80005608: 0007a503 lw a0,0(a5) +8000560c: 000980e7 jalr s3 + break; +80005610: ed5ff06f j 800054e4 + if ((p = va_arg(ap, char *)) == NULL) +80005614: 00c12783 lw a5,12(sp) +80005618: 00478713 addi a4,a5,4 +8000561c: 00e12623 sw a4,12(sp) +80005620: 0007aa03 lw s4,0(a5) +80005624: 020a0263 beqz s4,80005648 + if (width > 0 && padc != '-') +80005628: 05705a63 blez s7,8000567c +8000562c: 02d00793 li a5,45 +80005630: 04fc8663 beq s9,a5,8000567c + for (width -= strnlen(p, precision); width > 0; width--) +80005634: 00048593 mv a1,s1 +80005638: 000a0513 mv a0,s4 +8000563c: e3dff0ef jal ra,80005478 +80005640: 40ab8bb3 sub s7,s7,a0 +80005644: 0200006f j 80005664 + p = "(null)"; +80005648: 00003a17 auipc s4,0x3 +8000564c: 330a0a13 addi s4,s4,816 # 80008978 <_ctype_+0x224> +80005650: fd9ff06f j 80005628 + putch(padc, putdat); +80005654: 00090593 mv a1,s2 +80005658: 000c8513 mv a0,s9 +8000565c: 000980e7 jalr s3 + for (width -= strnlen(p, precision); width > 0; width--) +80005660: fffb8b93 addi s7,s7,-1 +80005664: ff7048e3 bgtz s7,80005654 +80005668: 0140006f j 8000567c + putch(ch, putdat); +8000566c: 00090593 mv a1,s2 +80005670: 000980e7 jalr s3 + p++; +80005674: 001a0a13 addi s4,s4,1 + for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { +80005678: fffb8b93 addi s7,s7,-1 +8000567c: 000a4503 lbu a0,0(s4) +80005680: 00050863 beqz a0,80005690 +80005684: fe04c4e3 bltz s1,8000566c +80005688: fff48493 addi s1,s1,-1 +8000568c: fe04d0e3 bgez s1,8000566c + for (; width > 0; width--) +80005690: e5705ae3 blez s7,800054e4 + putch(' ', putdat); +80005694: 00090593 mv a1,s2 +80005698: 02000513 li a0,32 +8000569c: 000980e7 jalr s3 + for (; width > 0; width--) +800056a0: fffb8b93 addi s7,s7,-1 +800056a4: fedff06f j 80005690 + num = getint(&ap, lflag); +800056a8: 00c10513 addi a0,sp,12 +800056ac: 9adff0ef jal ra,80005058 +800056b0: 00050493 mv s1,a0 +800056b4: 00058a13 mv s4,a1 +800056b8: 00050b13 mv s6,a0 +800056bc: 00058a93 mv s5,a1 + if ((long long) num < 0) { +800056c0: 0c05d063 bgez a1,80005780 + putch('-', putdat); +800056c4: 00090593 mv a1,s2 +800056c8: 02d00513 li a0,45 +800056cc: 000980e7 jalr s3 + num = -(long long) num; +800056d0: 00000793 li a5,0 +800056d4: 40978b33 sub s6,a5,s1 +800056d8: 01603ab3 snez s5,s6 +800056dc: 414787b3 sub a5,a5,s4 +800056e0: 41578ab3 sub s5,a5,s5 + base = 10; +800056e4: 00a00c13 li s8,10 +800056e8: 0440006f j 8000572c + base = 8; +800056ec: 00800c13 li s8,8 + goto unsigned_number; +800056f0: 02c0006f j 8000571c + putch('0', putdat); +800056f4: 00090593 mv a1,s2 +800056f8: 03000513 li a0,48 +800056fc: 000980e7 jalr s3 + putch('x', putdat); +80005700: 00090593 mv a1,s2 +80005704: 07800513 li a0,120 +80005708: 000980e7 jalr s3 + lflag = 1; +8000570c: 00100593 li a1,1 + base = 16; +80005710: 01000c13 li s8,16 +80005714: 0080006f j 8000571c +80005718: 01000c13 li s8,16 + num = getuint(&ap, lflag); +8000571c: 00c10513 addi a0,sp,12 +80005720: 8ddff0ef jal ra,80004ffc +80005724: 00050b13 mv s6,a0 +80005728: 00058a93 mv s5,a1 + int pos = 0; +8000572c: 00000493 li s1,0 + digs[pos++] = num % base; +80005730: 000c0613 mv a2,s8 +80005734: 00000693 li a3,0 +80005738: 000b0513 mv a0,s6 +8000573c: 000a8593 mv a1,s5 +80005740: 3fd000ef jal ra,8000633c <__umoddi3> +80005744: 00148a13 addi s4,s1,1 +80005748: 00249493 slli s1,s1,0x2 +8000574c: 11010793 addi a5,sp,272 +80005750: 009784b3 add s1,a5,s1 +80005754: f0a4a023 sw a0,-256(s1) + if (num < base) +80005758: 020a8863 beqz s5,80005788 + num /= base; +8000575c: 000c0613 mv a2,s8 +80005760: 00000693 li a3,0 +80005764: 000b0513 mv a0,s6 +80005768: 000a8593 mv a1,s5 +8000576c: 79c000ef jal ra,80005f08 <__udivdi3> +80005770: 00050b13 mv s6,a0 +80005774: 00058a93 mv s5,a1 + digs[pos++] = num % base; +80005778: 000a0493 mv s1,s4 +8000577c: fb5ff06f j 80005730 + base = 10; +80005780: 00a00c13 li s8,10 +80005784: fa9ff06f j 8000572c + if (num < base) +80005788: fd8b7ae3 bleu s8,s6,8000575c +8000578c: 0140006f j 800057a0 + putch(padc, putdat); +80005790: 00090593 mv a1,s2 +80005794: 000c8513 mv a0,s9 +80005798: 000980e7 jalr s3 + while (width-- > pos) +8000579c: 00048b93 mv s7,s1 +800057a0: fffb8493 addi s1,s7,-1 +800057a4: ff7a46e3 blt s4,s7,80005790 +800057a8: 0180006f j 800057c0 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057ac: 03000513 li a0,48 +800057b0: 00090593 mv a1,s2 +800057b4: 00a78533 add a0,a5,a0 +800057b8: 000980e7 jalr s3 + while (pos-- > 0) +800057bc: 00048a13 mv s4,s1 +800057c0: fffa0493 addi s1,s4,-1 +800057c4: d34050e3 blez s4,800054e4 + putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); +800057c8: 00249793 slli a5,s1,0x2 +800057cc: 11010713 addi a4,sp,272 +800057d0: 00f707b3 add a5,a4,a5 +800057d4: f007a783 lw a5,-256(a5) +800057d8: 00900713 li a4,9 +800057dc: fcf778e3 bleu a5,a4,800057ac +800057e0: 05700513 li a0,87 +800057e4: fcdff06f j 800057b0 + putch(ch, putdat); +800057e8: 00090593 mv a1,s2 +800057ec: 000980e7 jalr s3 + break; +800057f0: cf5ff06f j 800054e4 + putch('%', putdat); +800057f4: 00090593 mv a1,s2 +800057f8: 02500513 li a0,37 +800057fc: 000980e7 jalr s3 + fmt = last_fmt; +80005800: 000a0413 mv s0,s4 + while ((ch = *(unsigned char *) fmt) != '%') { +80005804: ce1ff06f j 800054e4 +} +80005808: 13c12083 lw ra,316(sp) +8000580c: 13812403 lw s0,312(sp) +80005810: 13412483 lw s1,308(sp) +80005814: 13012903 lw s2,304(sp) +80005818: 12c12983 lw s3,300(sp) +8000581c: 12812a03 lw s4,296(sp) +80005820: 12412a83 lw s5,292(sp) +80005824: 12012b03 lw s6,288(sp) +80005828: 11c12b83 lw s7,284(sp) +8000582c: 11812c03 lw s8,280(sp) +80005830: 11412c83 lw s9,276(sp) +80005834: 11012d03 lw s10,272(sp) +80005838: 14010113 addi sp,sp,320 +8000583c: 00008067 ret + +80005840 : +{ +80005840: fc010113 addi sp,sp,-64 +80005844: 00112e23 sw ra,28(sp) +80005848: 02b12223 sw a1,36(sp) +8000584c: 02c12423 sw a2,40(sp) +80005850: 02d12623 sw a3,44(sp) +80005854: 02e12823 sw a4,48(sp) +80005858: 02f12a23 sw a5,52(sp) +8000585c: 03012c23 sw a6,56(sp) +80005860: 03112e23 sw a7,60(sp) + va_start(ap, fmt); +80005864: 02410693 addi a3,sp,36 +80005868: 00d12623 sw a3,12(sp) + vprintfmt((void*)putchar, 0, fmt, ap); +8000586c: 00050613 mv a2,a0 +80005870: 00000593 li a1,0 +80005874: 00000517 auipc a0,0x0 +80005878: 8f450513 addi a0,a0,-1804 # 80005168 +8000587c: c25ff0ef jal ra,800054a0 +} +80005880: 00000513 li a0,0 +80005884: 01c12083 lw ra,28(sp) +80005888: 04010113 addi sp,sp,64 +8000588c: 00008067 ret + +80005890 : +{ +80005890: fb010113 addi sp,sp,-80 +80005894: 02112623 sw ra,44(sp) +80005898: 02812423 sw s0,40(sp) +8000589c: 00a12623 sw a0,12(sp) +800058a0: 02c12c23 sw a2,56(sp) +800058a4: 02d12e23 sw a3,60(sp) +800058a8: 04e12023 sw a4,64(sp) +800058ac: 04f12223 sw a5,68(sp) +800058b0: 05012423 sw a6,72(sp) +800058b4: 05112623 sw a7,76(sp) + char* str0 = str; +800058b8: 00050413 mv s0,a0 + va_start(ap, fmt); +800058bc: 03810693 addi a3,sp,56 +800058c0: 00d12e23 sw a3,28(sp) + vprintfmt(sprintf_putch, (void**)&str, fmt, ap); +800058c4: 00058613 mv a2,a1 +800058c8: 00c10593 addi a1,sp,12 +800058cc: fffff517 auipc a0,0xfffff +800058d0: 7e850513 addi a0,a0,2024 # 800050b4 +800058d4: bcdff0ef jal ra,800054a0 + *str = 0; +800058d8: 00c12783 lw a5,12(sp) +800058dc: 00078023 sb zero,0(a5) +} +800058e0: 00c12503 lw a0,12(sp) +800058e4: 40850533 sub a0,a0,s0 +800058e8: 02c12083 lw ra,44(sp) +800058ec: 02812403 lw s0,40(sp) +800058f0: 05010113 addi sp,sp,80 +800058f4: 00008067 ret + +800058f8 <_init>: +{ +800058f8: f6010113 addi sp,sp,-160 +800058fc: 08112e23 sw ra,156(sp) +80005900: 08812c23 sw s0,152(sp) +80005904: 08912a23 sw s1,148(sp) +80005908: 09212823 sw s2,144(sp) +8000590c: 09312623 sw s3,140(sp) +80005910: 00050413 mv s0,a0 +80005914: 00058913 mv s2,a1 +80005918: 03f10493 addi s1,sp,63 +8000591c: fc04f493 andi s1,s1,-64 + init_tls(); +80005920: a05ff0ef jal ra,80005324 + thread_entry(cid, nc); +80005924: 00090593 mv a1,s2 +80005928: 00040513 mv a0,s0 +8000592c: 941ff0ef jal ra,8000526c + int ret = main(0, 0); +80005930: 00000593 li a1,0 +80005934: 00000513 li a0,0 +80005938: dd8ff0ef jal ra,80004f10
+8000593c: 00050993 mv s3,a0 + for (int i = 0; i < NUM_COUNTERS; i++) +80005940: 00000413 li s0,0 + char* pbuf = buf; +80005944: 00048913 mv s2,s1 + for (int i = 0; i < NUM_COUNTERS; i++) +80005948: 0080006f j 80005950 <_init+0x58> +8000594c: 00140413 addi s0,s0,1 +80005950: 00100793 li a5,1 +80005954: 0287ce63 blt a5,s0,80005990 <_init+0x98> + if (counters[i]) +80005958: 00241713 slli a4,s0,0x2 +8000595c: 8bc18793 addi a5,gp,-1860 # 8000945c +80005960: 00e787b3 add a5,a5,a4 +80005964: 0007a683 lw a3,0(a5) +80005968: fe0682e3 beqz a3,8000594c <_init+0x54> + pbuf += sprintf(pbuf, "%s = %d\n", counter_names[i], counters[i]); +8000596c: 8b418793 addi a5,gp,-1868 # 80009454 +80005970: 00e787b3 add a5,a5,a4 +80005974: 0007a603 lw a2,0(a5) +80005978: 00003597 auipc a1,0x3 +8000597c: 00858593 addi a1,a1,8 # 80008980 <_ctype_+0x22c> +80005980: 00090513 mv a0,s2 +80005984: f0dff0ef jal ra,80005890 +80005988: 00a90933 add s2,s2,a0 +8000598c: fc1ff06f j 8000594c <_init+0x54> + if (pbuf != buf) +80005990: 01248663 beq s1,s2,8000599c <_init+0xa4> + printstr(buf); +80005994: 00048513 mv a0,s1 +80005998: a05ff0ef jal ra,8000539c + exit(ret); +8000599c: 00098513 mv a0,s3 +800059a0: 8b1ff0ef jal ra,80005250 + +800059a4 : +int strcmp(const char* s1, const char* s2) +{ + unsigned char c1, c2; + + do { + c1 = *s1++; +800059a4: 00150613 addi a2,a0,1 +800059a8: 00054783 lbu a5,0(a0) + c2 = *s2++; +800059ac: 00158693 addi a3,a1,1 +800059b0: 0005c703 lbu a4,0(a1) + } while (c1 != 0 && c1 == c2); +800059b4: 00078863 beqz a5,800059c4 + c1 = *s1++; +800059b8: 00060513 mv a0,a2 + c2 = *s2++; +800059bc: 00068593 mv a1,a3 + } while (c1 != 0 && c1 == c2); +800059c0: fee782e3 beq a5,a4,800059a4 + + return c1 - c2; +} +800059c4: 40e78533 sub a0,a5,a4 +800059c8: 00008067 ret + +800059cc : + +char* strcpy(char* dest, const char* src) +{ + char* d = dest; +800059cc: 00050793 mv a5,a0 + while ((*d++ = *src++)) +800059d0: 0005c703 lbu a4,0(a1) +800059d4: 00e78023 sb a4,0(a5) +800059d8: 00158593 addi a1,a1,1 +800059dc: 00178793 addi a5,a5,1 +800059e0: fe0718e3 bnez a4,800059d0 + ; + return dest; +} +800059e4: 00008067 ret + +800059e8 : + +long atol(const char* str) +{ +800059e8: 00050793 mv a5,a0 + long res = 0; + int sign = 0; + + while (*str == ' ') +800059ec: 0080006f j 800059f4 + str++; +800059f0: 00178793 addi a5,a5,1 + while (*str == ' ') +800059f4: 0007c703 lbu a4,0(a5) +800059f8: 02000693 li a3,32 +800059fc: fed70ae3 beq a4,a3,800059f0 + + if (*str == '-' || *str == '+') { +80005a00: 02d00693 li a3,45 +80005a04: 00d70a63 beq a4,a3,80005a18 +80005a08: 02b00693 li a3,43 +80005a0c: 00d70663 beq a4,a3,80005a18 + int sign = 0; +80005a10: 00000613 li a2,0 +80005a14: 0100006f j 80005a24 + sign = *str == '-'; +80005a18: fd370713 addi a4,a4,-45 +80005a1c: 00173613 seqz a2,a4 + str++; +80005a20: 00178793 addi a5,a5,1 + int sign = 0; +80005a24: 00000513 li a0,0 +80005a28: 01c0006f j 80005a44 + } + + while (*str) { + res *= 10; +80005a2c: 00251693 slli a3,a0,0x2 +80005a30: 00a686b3 add a3,a3,a0 +80005a34: 00169513 slli a0,a3,0x1 + res += *str++ - '0'; +80005a38: 00178793 addi a5,a5,1 +80005a3c: fd070713 addi a4,a4,-48 +80005a40: 00e50533 add a0,a0,a4 + while (*str) { +80005a44: 0007c703 lbu a4,0(a5) +80005a48: fe0712e3 bnez a4,80005a2c + } + + return sign ? -res : res; +80005a4c: 00060463 beqz a2,80005a54 +80005a50: 40a00533 neg a0,a0 +} +80005a54: 00008067 ret + +80005a58 <_sbrk>: + +// Default nosys implementation of _sbrk +void * +_sbrk (incr) + int incr; +{ +80005a58: 00050793 mv a5,a0 + extern char _end; + + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) +80005a5c: 8b018713 addi a4,gp,-1872 # 80009450 +80005a60: 00072703 lw a4,0(a4) +80005a64: 00070c63 beqz a4,80005a7c <_sbrk+0x24> + heap_end = & _end; + + prev_heap_end = heap_end; +80005a68: 8b018713 addi a4,gp,-1872 # 80009450 +80005a6c: 00072503 lw a0,0(a4) + heap_end += incr; +80005a70: 00f507b3 add a5,a0,a5 +80005a74: 00f72023 sw a5,0(a4) + + return (void *) prev_heap_end; +} +80005a78: 00008067 ret + heap_end = & _end; +80005a7c: 92018713 addi a4,gp,-1760 # 800094c0 <_end> +80005a80: 8ae1a823 sw a4,-1872(gp) # 80009450 +80005a84: fe5ff06f j 80005a68 <_sbrk+0x10> + +80005a88 <__divdi3>: + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; +80005a88: 00000313 li t1,0 + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) +80005a8c: 0005dc63 bgez a1,80005aa4 <__divdi3+0x1c> + c = ~c, + uu.ll = -uu.ll; +80005a90: 40a00533 neg a0,a0 +80005a94: 00a03833 snez a6,a0 +80005a98: 40b00733 neg a4,a1 +80005a9c: 410705b3 sub a1,a4,a6 + c = ~c, +80005aa0: fff00313 li t1,-1 + if (vv.s.high < 0) +80005aa4: 0006dc63 bgez a3,80005abc <__divdi3+0x34> + c = ~c, + vv.ll = -vv.ll; +80005aa8: 40c00633 neg a2,a2 +80005aac: 00c037b3 snez a5,a2 +80005ab0: 40d006b3 neg a3,a3 + c = ~c, +80005ab4: fff34313 not t1,t1 + vv.ll = -vv.ll; +80005ab8: 40f686b3 sub a3,a3,a5 + d0 = dd.s.low; +80005abc: 00060813 mv a6,a2 + d1 = dd.s.high; +80005ac0: 00068713 mv a4,a3 + n0 = nn.s.low; +80005ac4: 00050893 mv a7,a0 + n1 = nn.s.high; +80005ac8: 00058e13 mv t3,a1 + if (d1 == 0) +80005acc: 2a069263 bnez a3,80005d70 <__divdi3+0x2e8> +80005ad0: 800086b7 lui a3,0x80008 +80005ad4: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80005ad8: 0ec5f663 bleu a2,a1,80005bc4 <__divdi3+0x13c> + count_leading_zeros (bm, d0); +80005adc: 000107b7 lui a5,0x10 +80005ae0: 0cf67863 bleu a5,a2,80005bb0 <__divdi3+0x128> +80005ae4: 0ff00e93 li t4,255 +80005ae8: 00cebeb3 sltu t4,t4,a2 +80005aec: 003e9e93 slli t4,t4,0x3 +80005af0: 01d657b3 srl a5,a2,t4 +80005af4: 00f686b3 add a3,a3,a5 +80005af8: 0006c703 lbu a4,0(a3) +80005afc: 02000793 li a5,32 +80005b00: 01d70eb3 add t4,a4,t4 +80005b04: 41d787b3 sub a5,a5,t4 + if (bm != 0) +80005b08: 00078c63 beqz a5,80005b20 <__divdi3+0x98> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b0c: 00f59733 sll a4,a1,a5 +80005b10: 01d55eb3 srl t4,a0,t4 + d0 = d0 << bm; +80005b14: 00f61833 sll a6,a2,a5 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005b18: 00eeee33 or t3,t4,a4 + n0 = n0 << bm; +80005b1c: 00f518b3 sll a7,a0,a5 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005b20: 01085613 srli a2,a6,0x10 +80005b24: 02ce5733 divu a4,t3,a2 +80005b28: 01081593 slli a1,a6,0x10 +80005b2c: 0105d593 srli a1,a1,0x10 +80005b30: 0108d693 srli a3,a7,0x10 +80005b34: 02ce77b3 remu a5,t3,a2 +80005b38: 02e58533 mul a0,a1,a4 +80005b3c: 01079793 slli a5,a5,0x10 +80005b40: 00d7e6b3 or a3,a5,a3 +80005b44: 00070793 mv a5,a4 +80005b48: 00a6fe63 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b4c: 010686b3 add a3,a3,a6 +80005b50: fff70793 addi a5,a4,-1 +80005b54: 0106e863 bltu a3,a6,80005b64 <__divdi3+0xdc> +80005b58: 00a6f663 bleu a0,a3,80005b64 <__divdi3+0xdc> +80005b5c: ffe70793 addi a5,a4,-2 +80005b60: 010686b3 add a3,a3,a6 +80005b64: 40a686b3 sub a3,a3,a0 +80005b68: 02c6f733 remu a4,a3,a2 +80005b6c: 01089893 slli a7,a7,0x10 +80005b70: 0108d893 srli a7,a7,0x10 +80005b74: 02c6d6b3 divu a3,a3,a2 +80005b78: 01071713 slli a4,a4,0x10 +80005b7c: 011768b3 or a7,a4,a7 +80005b80: 02d585b3 mul a1,a1,a3 +80005b84: 00068513 mv a0,a3 +80005b88: 00b8fc63 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b8c: 011808b3 add a7,a6,a7 +80005b90: fff68513 addi a0,a3,-1 +80005b94: 0108e663 bltu a7,a6,80005ba0 <__divdi3+0x118> +80005b98: 00b8f463 bleu a1,a7,80005ba0 <__divdi3+0x118> +80005b9c: ffe68513 addi a0,a3,-2 +80005ba0: 01079793 slli a5,a5,0x10 +80005ba4: 00a7e7b3 or a5,a5,a0 + q1 = 0; +80005ba8: 00000e13 li t3,0 +80005bac: 0e40006f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d0); +80005bb0: 010007b7 lui a5,0x1000 +80005bb4: 01000e93 li t4,16 +80005bb8: f2f66ce3 bltu a2,a5,80005af0 <__divdi3+0x68> +80005bbc: 01800e93 li t4,24 +80005bc0: f31ff06f j 80005af0 <__divdi3+0x68> + if (d0 == 0) +80005bc4: 00061663 bnez a2,80005bd0 <__divdi3+0x148> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80005bc8: 00100813 li a6,1 +80005bcc: 02e85833 divu a6,a6,a4 + count_leading_zeros (bm, d0); +80005bd0: 000107b7 lui a5,0x10 +80005bd4: 0cf87e63 bleu a5,a6,80005cb0 <__divdi3+0x228> +80005bd8: 0ff00793 li a5,255 +80005bdc: 0107f463 bleu a6,a5,80005be4 <__divdi3+0x15c> +80005be0: 00800713 li a4,8 +80005be4: 00e857b3 srl a5,a6,a4 +80005be8: 00f686b3 add a3,a3,a5 +80005bec: 0006c783 lbu a5,0(a3) +80005bf0: 02000693 li a3,32 +80005bf4: 00e787b3 add a5,a5,a4 +80005bf8: 40f686b3 sub a3,a3,a5 + if (bm == 0) +80005bfc: 0c069463 bnez a3,80005cc4 <__divdi3+0x23c> + n1 -= d0; +80005c00: 41058733 sub a4,a1,a6 + q1 = 1; +80005c04: 00100e13 li t3,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005c08: 01085613 srli a2,a6,0x10 +80005c0c: 01081593 slli a1,a6,0x10 +80005c10: 0105d593 srli a1,a1,0x10 +80005c14: 0108d693 srli a3,a7,0x10 +80005c18: 02c777b3 remu a5,a4,a2 +80005c1c: 02c75733 divu a4,a4,a2 +80005c20: 01079793 slli a5,a5,0x10 +80005c24: 00d7e6b3 or a3,a5,a3 +80005c28: 02e58533 mul a0,a1,a4 +80005c2c: 00070793 mv a5,a4 +80005c30: 00a6fe63 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c34: 010686b3 add a3,a3,a6 +80005c38: fff70793 addi a5,a4,-1 +80005c3c: 0106e863 bltu a3,a6,80005c4c <__divdi3+0x1c4> +80005c40: 00a6f663 bleu a0,a3,80005c4c <__divdi3+0x1c4> +80005c44: ffe70793 addi a5,a4,-2 +80005c48: 010686b3 add a3,a3,a6 +80005c4c: 40a686b3 sub a3,a3,a0 +80005c50: 02c6f733 remu a4,a3,a2 +80005c54: 01089893 slli a7,a7,0x10 +80005c58: 0108d893 srli a7,a7,0x10 +80005c5c: 02c6d6b3 divu a3,a3,a2 +80005c60: 01071713 slli a4,a4,0x10 +80005c64: 011768b3 or a7,a4,a7 +80005c68: 02d585b3 mul a1,a1,a3 +80005c6c: 00068513 mv a0,a3 +80005c70: 00b8fc63 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c74: 011808b3 add a7,a6,a7 +80005c78: fff68513 addi a0,a3,-1 +80005c7c: 0108e663 bltu a7,a6,80005c88 <__divdi3+0x200> +80005c80: 00b8f463 bleu a1,a7,80005c88 <__divdi3+0x200> +80005c84: ffe68513 addi a0,a3,-2 +80005c88: 01079793 slli a5,a5,0x10 +80005c8c: 00a7e7b3 or a5,a5,a0 + return ww.ll; +80005c90: 00078513 mv a0,a5 +80005c94: 000e0593 mv a1,t3 + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) +80005c98: 00030a63 beqz t1,80005cac <__divdi3+0x224> + w = -w; +80005c9c: 40f00533 neg a0,a5 +80005ca0: 00a037b3 snez a5,a0 +80005ca4: 41c005b3 neg a1,t3 +80005ca8: 40f585b3 sub a1,a1,a5 + + return w; +} +80005cac: 00008067 ret + count_leading_zeros (bm, d0); +80005cb0: 010007b7 lui a5,0x1000 +80005cb4: 01000713 li a4,16 +80005cb8: f2f866e3 bltu a6,a5,80005be4 <__divdi3+0x15c> +80005cbc: 01800713 li a4,24 +80005cc0: f25ff06f j 80005be4 <__divdi3+0x15c> + d0 = d0 << bm; +80005cc4: 00d81833 sll a6,a6,a3 + n2 = n1 >> b; +80005cc8: 00f5deb3 srl t4,a1,a5 + n0 = n0 << bm; +80005ccc: 00d518b3 sll a7,a0,a3 + n1 = (n1 << bm) | (n0 >> b); +80005cd0: 00f557b3 srl a5,a0,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cd4: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005cd8: 00d59733 sll a4,a1,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005cdc: 02aed5b3 divu a1,t4,a0 + n1 = (n1 << bm) | (n0 >> b); +80005ce0: 00e7e633 or a2,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80005ce4: 01081713 slli a4,a6,0x10 +80005ce8: 01075713 srli a4,a4,0x10 +80005cec: 01065793 srli a5,a2,0x10 +80005cf0: 02aef6b3 remu a3,t4,a0 +80005cf4: 00058e13 mv t3,a1 +80005cf8: 02b70eb3 mul t4,a4,a1 +80005cfc: 01069693 slli a3,a3,0x10 +80005d00: 00f6e7b3 or a5,a3,a5 +80005d04: 01d7fe63 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d08: 010787b3 add a5,a5,a6 +80005d0c: fff58e13 addi t3,a1,-1 +80005d10: 0107e863 bltu a5,a6,80005d20 <__divdi3+0x298> +80005d14: 01d7f663 bleu t4,a5,80005d20 <__divdi3+0x298> +80005d18: ffe58e13 addi t3,a1,-2 +80005d1c: 010787b3 add a5,a5,a6 +80005d20: 41d787b3 sub a5,a5,t4 +80005d24: 02a7f5b3 remu a1,a5,a0 +80005d28: 01061613 slli a2,a2,0x10 +80005d2c: 01065613 srli a2,a2,0x10 +80005d30: 02a7d7b3 divu a5,a5,a0 +80005d34: 01059593 slli a1,a1,0x10 +80005d38: 00c5e5b3 or a1,a1,a2 +80005d3c: 02f70733 mul a4,a4,a5 +80005d40: 00078693 mv a3,a5 +80005d44: 00e5fe63 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d48: 010585b3 add a1,a1,a6 +80005d4c: fff78693 addi a3,a5,-1 # ffffff +80005d50: 0105e863 bltu a1,a6,80005d60 <__divdi3+0x2d8> +80005d54: 00e5f663 bleu a4,a1,80005d60 <__divdi3+0x2d8> +80005d58: ffe78693 addi a3,a5,-2 +80005d5c: 010585b3 add a1,a1,a6 +80005d60: 010e1e13 slli t3,t3,0x10 +80005d64: 40e58733 sub a4,a1,a4 +80005d68: 00de6e33 or t3,t3,a3 +80005d6c: e9dff06f j 80005c08 <__divdi3+0x180> + if (d1 > n1) +80005d70: 18d5e663 bltu a1,a3,80005efc <__divdi3+0x474> + count_leading_zeros (bm, d1); +80005d74: 000107b7 lui a5,0x10 +80005d78: 04f6f463 bleu a5,a3,80005dc0 <__divdi3+0x338> +80005d7c: 0ff00813 li a6,255 +80005d80: 00d838b3 sltu a7,a6,a3 +80005d84: 00389893 slli a7,a7,0x3 +80005d88: 80008737 lui a4,0x80008 +80005d8c: 0116d7b3 srl a5,a3,a7 +80005d90: 65470713 addi a4,a4,1620 # 80008654 +80005d94: 00e787b3 add a5,a5,a4 +80005d98: 0007c803 lbu a6,0(a5) # 10000 +80005d9c: 02000e13 li t3,32 +80005da0: 01180833 add a6,a6,a7 +80005da4: 410e0e33 sub t3,t3,a6 + if (bm == 0) +80005da8: 020e1663 bnez t3,80005dd4 <__divdi3+0x34c> + q0 = 1; +80005dac: 00100793 li a5,1 + if (n1 > d1 || n0 >= d0) +80005db0: eeb6e0e3 bltu a3,a1,80005c90 <__divdi3+0x208> +80005db4: 00c53633 sltu a2,a0,a2 +80005db8: 00164793 xori a5,a2,1 +80005dbc: ed5ff06f j 80005c90 <__divdi3+0x208> + count_leading_zeros (bm, d1); +80005dc0: 010007b7 lui a5,0x1000 +80005dc4: 01000893 li a7,16 +80005dc8: fcf6e0e3 bltu a3,a5,80005d88 <__divdi3+0x300> +80005dcc: 01800893 li a7,24 +80005dd0: fb9ff06f j 80005d88 <__divdi3+0x300> + d1 = (d1 << bm) | (d0 >> b); +80005dd4: 010657b3 srl a5,a2,a6 +80005dd8: 01c696b3 sll a3,a3,t3 +80005ddc: 00d7e6b3 or a3,a5,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de0: 0106df13 srli t5,a3,0x10 + n2 = n1 >> b; +80005de4: 0105d7b3 srl a5,a1,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005de8: 03e7f8b3 remu a7,a5,t5 +80005dec: 01069e93 slli t4,a3,0x10 +80005df0: 010ede93 srli t4,t4,0x10 + n1 = (n1 << bm) | (n0 >> b); +80005df4: 01c59733 sll a4,a1,t3 +80005df8: 01055833 srl a6,a0,a6 +80005dfc: 00e86733 or a4,a6,a4 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e00: 01075813 srli a6,a4,0x10 + d0 = d0 << bm; +80005e04: 01c61633 sll a2,a2,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e08: 03e7d7b3 divu a5,a5,t5 +80005e0c: 01089893 slli a7,a7,0x10 +80005e10: 0108e833 or a6,a7,a6 +80005e14: 02fe8fb3 mul t6,t4,a5 +80005e18: 00078593 mv a1,a5 +80005e1c: 01f87e63 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e20: 00d80833 add a6,a6,a3 +80005e24: fff78593 addi a1,a5,-1 # ffffff +80005e28: 00d86863 bltu a6,a3,80005e38 <__divdi3+0x3b0> +80005e2c: 01f87663 bleu t6,a6,80005e38 <__divdi3+0x3b0> +80005e30: ffe78593 addi a1,a5,-2 +80005e34: 00d80833 add a6,a6,a3 +80005e38: 41f80833 sub a6,a6,t6 +80005e3c: 03e878b3 remu a7,a6,t5 +80005e40: 01071713 slli a4,a4,0x10 +80005e44: 01075713 srli a4,a4,0x10 +80005e48: 03e85833 divu a6,a6,t5 +80005e4c: 01089893 slli a7,a7,0x10 +80005e50: 00e8e733 or a4,a7,a4 +80005e54: 030e8eb3 mul t4,t4,a6 +80005e58: 00080793 mv a5,a6 +80005e5c: 01d77e63 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e60: 00d70733 add a4,a4,a3 +80005e64: fff80793 addi a5,a6,-1 +80005e68: 00d76863 bltu a4,a3,80005e78 <__divdi3+0x3f0> +80005e6c: 01d77663 bleu t4,a4,80005e78 <__divdi3+0x3f0> +80005e70: ffe80793 addi a5,a6,-2 +80005e74: 00d70733 add a4,a4,a3 +80005e78: 01059593 slli a1,a1,0x10 + umul_ppmm (m1, m0, q0, d0); +80005e7c: 00010f37 lui t5,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e80: 00f5e7b3 or a5,a1,a5 + umul_ppmm (m1, m0, q0, d0); +80005e84: ffff0593 addi a1,t5,-1 # ffff +80005e88: 00b7f8b3 and a7,a5,a1 +80005e8c: 0107d813 srli a6,a5,0x10 +80005e90: 00b675b3 and a1,a2,a1 +80005e94: 01065613 srli a2,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +80005e98: 41d70733 sub a4,a4,t4 + umul_ppmm (m1, m0, q0, d0); +80005e9c: 02b88eb3 mul t4,a7,a1 +80005ea0: 02b805b3 mul a1,a6,a1 +80005ea4: 010ed693 srli a3,t4,0x10 +80005ea8: 02c888b3 mul a7,a7,a2 +80005eac: 00b888b3 add a7,a7,a1 +80005eb0: 011686b3 add a3,a3,a7 +80005eb4: 02c80833 mul a6,a6,a2 +80005eb8: 00b6f463 bleu a1,a3,80005ec0 <__divdi3+0x438> +80005ebc: 01e80833 add a6,a6,t5 +80005ec0: 0106d613 srli a2,a3,0x10 +80005ec4: 01060833 add a6,a2,a6 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ec8: 03076663 bltu a4,a6,80005ef4 <__divdi3+0x46c> +80005ecc: cd071ee3 bne a4,a6,80005ba8 <__divdi3+0x120> + umul_ppmm (m1, m0, q0, d0); +80005ed0: 00010737 lui a4,0x10 +80005ed4: fff70713 addi a4,a4,-1 # ffff +80005ed8: 00e6f6b3 and a3,a3,a4 +80005edc: 01069693 slli a3,a3,0x10 +80005ee0: 00eefeb3 and t4,t4,a4 + n0 = n0 << bm; +80005ee4: 01c51533 sll a0,a0,t3 + umul_ppmm (m1, m0, q0, d0); +80005ee8: 01d686b3 add a3,a3,t4 + q1 = 0; +80005eec: 00000e13 li t3,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80005ef0: dad570e3 bleu a3,a0,80005c90 <__divdi3+0x208> + q0--; +80005ef4: fff78793 addi a5,a5,-1 +80005ef8: cb1ff06f j 80005ba8 <__divdi3+0x120> + q1 = 0; +80005efc: 00000e13 li t3,0 + q0 = 0; +80005f00: 00000793 li a5,0 +80005f04: d8dff06f j 80005c90 <__divdi3+0x208> + +80005f08 <__udivdi3>: +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ +80005f08: 00058793 mv a5,a1 + d0 = dd.s.low; +80005f0c: 00060813 mv a6,a2 + d1 = dd.s.high; +80005f10: 00068893 mv a7,a3 + n0 = nn.s.low; +80005f14: 00050313 mv t1,a0 + if (d1 == 0) +80005f18: 28069663 bnez a3,800061a4 <__udivdi3+0x29c> +80005f1c: 80008737 lui a4,0x80008 +80005f20: 65470713 addi a4,a4,1620 # 80008654 + if (d0 > n1) +80005f24: 0ec5f663 bleu a2,a1,80006010 <__udivdi3+0x108> + count_leading_zeros (bm, d0); +80005f28: 000106b7 lui a3,0x10 +80005f2c: 0cd67863 bleu a3,a2,80005ffc <__udivdi3+0xf4> +80005f30: 0ff00693 li a3,255 +80005f34: 00c6b6b3 sltu a3,a3,a2 +80005f38: 00369693 slli a3,a3,0x3 +80005f3c: 00d658b3 srl a7,a2,a3 +80005f40: 01170733 add a4,a4,a7 +80005f44: 00074703 lbu a4,0(a4) +80005f48: 00d706b3 add a3,a4,a3 +80005f4c: 02000713 li a4,32 +80005f50: 40d70733 sub a4,a4,a3 + if (bm != 0) +80005f54: 00070c63 beqz a4,80005f6c <__udivdi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f58: 00e797b3 sll a5,a5,a4 +80005f5c: 00d556b3 srl a3,a0,a3 + d0 = d0 << bm; +80005f60: 00e61833 sll a6,a2,a4 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80005f64: 00f6e5b3 or a1,a3,a5 + n0 = n0 << bm; +80005f68: 00e51333 sll t1,a0,a4 + udiv_qrnnd (q0, n0, n1, n0, d0); +80005f6c: 01085513 srli a0,a6,0x10 +80005f70: 02a5d7b3 divu a5,a1,a0 +80005f74: 01081613 slli a2,a6,0x10 +80005f78: 01065613 srli a2,a2,0x10 +80005f7c: 01035693 srli a3,t1,0x10 +80005f80: 02a5f733 remu a4,a1,a0 +80005f84: 02f605b3 mul a1,a2,a5 +80005f88: 01071713 slli a4,a4,0x10 +80005f8c: 00d766b3 or a3,a4,a3 +80005f90: 00078713 mv a4,a5 +80005f94: 00b6fe63 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005f98: 010686b3 add a3,a3,a6 +80005f9c: fff78713 addi a4,a5,-1 +80005fa0: 0106e863 bltu a3,a6,80005fb0 <__udivdi3+0xa8> +80005fa4: 00b6f663 bleu a1,a3,80005fb0 <__udivdi3+0xa8> +80005fa8: ffe78713 addi a4,a5,-2 +80005fac: 010686b3 add a3,a3,a6 +80005fb0: 40b686b3 sub a3,a3,a1 +80005fb4: 02a6f7b3 remu a5,a3,a0 +80005fb8: 01031313 slli t1,t1,0x10 +80005fbc: 01035313 srli t1,t1,0x10 +80005fc0: 02a6d6b3 divu a3,a3,a0 +80005fc4: 01079793 slli a5,a5,0x10 +80005fc8: 0067e333 or t1,a5,t1 +80005fcc: 02d605b3 mul a1,a2,a3 +80005fd0: 00068513 mv a0,a3 +80005fd4: 00b37c63 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fd8: 00680333 add t1,a6,t1 +80005fdc: fff68513 addi a0,a3,-1 # ffff +80005fe0: 01036663 bltu t1,a6,80005fec <__udivdi3+0xe4> +80005fe4: 00b37463 bleu a1,t1,80005fec <__udivdi3+0xe4> +80005fe8: ffe68513 addi a0,a3,-2 +80005fec: 01071713 slli a4,a4,0x10 +80005ff0: 00a76733 or a4,a4,a0 + q1 = 0; +80005ff4: 00000593 li a1,0 +80005ff8: 0e40006f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d0); +80005ffc: 010008b7 lui a7,0x1000 +80006000: 01000693 li a3,16 +80006004: f3166ce3 bltu a2,a7,80005f3c <__udivdi3+0x34> +80006008: 01800693 li a3,24 +8000600c: f31ff06f j 80005f3c <__udivdi3+0x34> + if (d0 == 0) +80006010: 00061663 bnez a2,8000601c <__udivdi3+0x114> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006014: 00100693 li a3,1 +80006018: 02c6d833 divu a6,a3,a2 + count_leading_zeros (bm, d0); +8000601c: 000106b7 lui a3,0x10 +80006020: 0cd87263 bleu a3,a6,800060e4 <__udivdi3+0x1dc> +80006024: 0ff00693 li a3,255 +80006028: 0106f463 bleu a6,a3,80006030 <__udivdi3+0x128> +8000602c: 00800893 li a7,8 +80006030: 011856b3 srl a3,a6,a7 +80006034: 00d70733 add a4,a4,a3 +80006038: 00074683 lbu a3,0(a4) +8000603c: 02000713 li a4,32 +80006040: 011686b3 add a3,a3,a7 +80006044: 40d70733 sub a4,a4,a3 + if (bm == 0) +80006048: 0a071863 bnez a4,800060f8 <__udivdi3+0x1f0> + n1 -= d0; +8000604c: 410787b3 sub a5,a5,a6 + q1 = 1; +80006050: 00100593 li a1,1 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006054: 01085613 srli a2,a6,0x10 +80006058: 01081893 slli a7,a6,0x10 +8000605c: 0108d893 srli a7,a7,0x10 +80006060: 01035693 srli a3,t1,0x10 +80006064: 02c7f733 remu a4,a5,a2 +80006068: 02c7d7b3 divu a5,a5,a2 +8000606c: 01071713 slli a4,a4,0x10 +80006070: 00d766b3 or a3,a4,a3 +80006074: 02f88533 mul a0,a7,a5 +80006078: 00078713 mv a4,a5 +8000607c: 00a6fe63 bleu a0,a3,80006098 <__udivdi3+0x190> +80006080: 010686b3 add a3,a3,a6 +80006084: fff78713 addi a4,a5,-1 +80006088: 0106e863 bltu a3,a6,80006098 <__udivdi3+0x190> +8000608c: 00a6f663 bleu a0,a3,80006098 <__udivdi3+0x190> +80006090: ffe78713 addi a4,a5,-2 +80006094: 010686b3 add a3,a3,a6 +80006098: 40a686b3 sub a3,a3,a0 +8000609c: 02c6f7b3 remu a5,a3,a2 +800060a0: 01031313 slli t1,t1,0x10 +800060a4: 01035313 srli t1,t1,0x10 +800060a8: 02c6d6b3 divu a3,a3,a2 +800060ac: 01079793 slli a5,a5,0x10 +800060b0: 0067e333 or t1,a5,t1 +800060b4: 02d888b3 mul a7,a7,a3 +800060b8: 00068513 mv a0,a3 +800060bc: 01137c63 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060c0: 00680333 add t1,a6,t1 +800060c4: fff68513 addi a0,a3,-1 # ffff +800060c8: 01036663 bltu t1,a6,800060d4 <__udivdi3+0x1cc> +800060cc: 01137463 bleu a7,t1,800060d4 <__udivdi3+0x1cc> +800060d0: ffe68513 addi a0,a3,-2 +800060d4: 01071713 slli a4,a4,0x10 +800060d8: 00a76733 or a4,a4,a0 + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +800060dc: 00070513 mv a0,a4 +800060e0: 00008067 ret + count_leading_zeros (bm, d0); +800060e4: 010006b7 lui a3,0x1000 +800060e8: 01000893 li a7,16 +800060ec: f4d862e3 bltu a6,a3,80006030 <__udivdi3+0x128> +800060f0: 01800893 li a7,24 +800060f4: f3dff06f j 80006030 <__udivdi3+0x128> + d0 = d0 << bm; +800060f8: 00e81833 sll a6,a6,a4 + n2 = n1 >> b; +800060fc: 00d7d5b3 srl a1,a5,a3 + n0 = n0 << bm; +80006100: 00e51333 sll t1,a0,a4 + n1 = (n1 << bm) | (n0 >> b); +80006104: 00d556b3 srl a3,a0,a3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006108: 01085513 srli a0,a6,0x10 + n1 = (n1 << bm) | (n0 >> b); +8000610c: 00e797b3 sll a5,a5,a4 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006110: 02a5f733 remu a4,a1,a0 + n1 = (n1 << bm) | (n0 >> b); +80006114: 00f6e8b3 or a7,a3,a5 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006118: 01081793 slli a5,a6,0x10 +8000611c: 0107d793 srli a5,a5,0x10 +80006120: 0108d613 srli a2,a7,0x10 +80006124: 02a5d5b3 divu a1,a1,a0 +80006128: 01071713 slli a4,a4,0x10 +8000612c: 00c76733 or a4,a4,a2 +80006130: 02b786b3 mul a3,a5,a1 +80006134: 00058613 mv a2,a1 +80006138: 00d77e63 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000613c: 01070733 add a4,a4,a6 +80006140: fff58613 addi a2,a1,-1 +80006144: 01076863 bltu a4,a6,80006154 <__udivdi3+0x24c> +80006148: 00d77663 bleu a3,a4,80006154 <__udivdi3+0x24c> +8000614c: ffe58613 addi a2,a1,-2 +80006150: 01070733 add a4,a4,a6 +80006154: 40d706b3 sub a3,a4,a3 +80006158: 02a6f733 remu a4,a3,a0 +8000615c: 01089893 slli a7,a7,0x10 +80006160: 0108d893 srli a7,a7,0x10 +80006164: 02a6d6b3 divu a3,a3,a0 +80006168: 01071713 slli a4,a4,0x10 +8000616c: 02d785b3 mul a1,a5,a3 +80006170: 011767b3 or a5,a4,a7 +80006174: 00068713 mv a4,a3 +80006178: 00b7fe63 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000617c: 010787b3 add a5,a5,a6 +80006180: fff68713 addi a4,a3,-1 # ffffff +80006184: 0107e863 bltu a5,a6,80006194 <__udivdi3+0x28c> +80006188: 00b7f663 bleu a1,a5,80006194 <__udivdi3+0x28c> +8000618c: ffe68713 addi a4,a3,-2 +80006190: 010787b3 add a5,a5,a6 +80006194: 40b787b3 sub a5,a5,a1 +80006198: 01061593 slli a1,a2,0x10 +8000619c: 00e5e5b3 or a1,a1,a4 +800061a0: eb5ff06f j 80006054 <__udivdi3+0x14c> + if (d1 > n1) +800061a4: 18d5e663 bltu a1,a3,80006330 <__udivdi3+0x428> + count_leading_zeros (bm, d1); +800061a8: 00010737 lui a4,0x10 +800061ac: 04e6f463 bleu a4,a3,800061f4 <__udivdi3+0x2ec> +800061b0: 0ff00813 li a6,255 +800061b4: 00d83733 sltu a4,a6,a3 +800061b8: 00371713 slli a4,a4,0x3 +800061bc: 80008837 lui a6,0x80008 +800061c0: 65480813 addi a6,a6,1620 # 80008654 +800061c4: 00e6d5b3 srl a1,a3,a4 +800061c8: 010585b3 add a1,a1,a6 +800061cc: 0005c803 lbu a6,0(a1) +800061d0: 02000593 li a1,32 +800061d4: 00e80833 add a6,a6,a4 +800061d8: 410585b3 sub a1,a1,a6 + if (bm == 0) +800061dc: 02059663 bnez a1,80006208 <__udivdi3+0x300> + q0 = 1; +800061e0: 00100713 li a4,1 + if (n1 > d1 || n0 >= d0) +800061e4: eef6ece3 bltu a3,a5,800060dc <__udivdi3+0x1d4> +800061e8: 00c53533 sltu a0,a0,a2 +800061ec: 00154713 xori a4,a0,1 +800061f0: eedff06f j 800060dc <__udivdi3+0x1d4> + count_leading_zeros (bm, d1); +800061f4: 010005b7 lui a1,0x1000 +800061f8: 01000713 li a4,16 +800061fc: fcb6e0e3 bltu a3,a1,800061bc <__udivdi3+0x2b4> +80006200: 01800713 li a4,24 +80006204: fb9ff06f j 800061bc <__udivdi3+0x2b4> + d1 = (d1 << bm) | (d0 >> b); +80006208: 01065733 srl a4,a2,a6 +8000620c: 00b696b3 sll a3,a3,a1 +80006210: 00d766b3 or a3,a4,a3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006214: 0106de93 srli t4,a3,0x10 + n2 = n1 >> b; +80006218: 0107d733 srl a4,a5,a6 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000621c: 03d778b3 remu a7,a4,t4 + n1 = (n1 << bm) | (n0 >> b); +80006220: 00b797b3 sll a5,a5,a1 +80006224: 01055833 srl a6,a0,a6 +80006228: 00f86333 or t1,a6,a5 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000622c: 01069793 slli a5,a3,0x10 +80006230: 0107d793 srli a5,a5,0x10 +80006234: 01035813 srli a6,t1,0x10 + d0 = d0 << bm; +80006238: 00b61633 sll a2,a2,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +8000623c: 03d75733 divu a4,a4,t4 +80006240: 01089893 slli a7,a7,0x10 +80006244: 0108e833 or a6,a7,a6 +80006248: 02e78f33 mul t5,a5,a4 +8000624c: 00070e13 mv t3,a4 +80006250: 01e87e63 bleu t5,a6,8000626c <__udivdi3+0x364> +80006254: 00d80833 add a6,a6,a3 +80006258: fff70e13 addi t3,a4,-1 # ffff +8000625c: 00d86863 bltu a6,a3,8000626c <__udivdi3+0x364> +80006260: 01e87663 bleu t5,a6,8000626c <__udivdi3+0x364> +80006264: ffe70e13 addi t3,a4,-2 +80006268: 00d80833 add a6,a6,a3 +8000626c: 41e80833 sub a6,a6,t5 +80006270: 03d878b3 remu a7,a6,t4 +80006274: 03d85833 divu a6,a6,t4 +80006278: 01089893 slli a7,a7,0x10 +8000627c: 03078eb3 mul t4,a5,a6 +80006280: 01031793 slli a5,t1,0x10 +80006284: 0107d793 srli a5,a5,0x10 +80006288: 00f8e7b3 or a5,a7,a5 +8000628c: 00080713 mv a4,a6 +80006290: 01d7fe63 bleu t4,a5,800062ac <__udivdi3+0x3a4> +80006294: 00d787b3 add a5,a5,a3 +80006298: fff80713 addi a4,a6,-1 +8000629c: 00d7e863 bltu a5,a3,800062ac <__udivdi3+0x3a4> +800062a0: 01d7f663 bleu t4,a5,800062ac <__udivdi3+0x3a4> +800062a4: ffe80713 addi a4,a6,-2 +800062a8: 00d787b3 add a5,a5,a3 +800062ac: 010e1e13 slli t3,t3,0x10 +800062b0: 41d787b3 sub a5,a5,t4 + umul_ppmm (m1, m0, q0, d0); +800062b4: 00010eb7 lui t4,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800062b8: 00ee6733 or a4,t3,a4 + umul_ppmm (m1, m0, q0, d0); +800062bc: fffe8813 addi a6,t4,-1 # ffff +800062c0: 01077333 and t1,a4,a6 +800062c4: 01075893 srli a7,a4,0x10 +800062c8: 01067833 and a6,a2,a6 +800062cc: 01065613 srli a2,a2,0x10 +800062d0: 03030e33 mul t3,t1,a6 +800062d4: 03088833 mul a6,a7,a6 +800062d8: 010e5693 srli a3,t3,0x10 +800062dc: 02c30333 mul t1,t1,a2 +800062e0: 01030333 add t1,t1,a6 +800062e4: 006686b3 add a3,a3,t1 +800062e8: 02c888b3 mul a7,a7,a2 +800062ec: 0106f463 bleu a6,a3,800062f4 <__udivdi3+0x3ec> +800062f0: 01d888b3 add a7,a7,t4 +800062f4: 0106d613 srli a2,a3,0x10 +800062f8: 011608b3 add a7,a2,a7 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +800062fc: 0317e663 bltu a5,a7,80006328 <__udivdi3+0x420> +80006300: cf179ae3 bne a5,a7,80005ff4 <__udivdi3+0xec> + umul_ppmm (m1, m0, q0, d0); +80006304: 000107b7 lui a5,0x10 +80006308: fff78793 addi a5,a5,-1 # ffff +8000630c: 00f6f6b3 and a3,a3,a5 +80006310: 01069693 slli a3,a3,0x10 +80006314: 00fe7e33 and t3,t3,a5 + n0 = n0 << bm; +80006318: 00b51533 sll a0,a0,a1 + umul_ppmm (m1, m0, q0, d0); +8000631c: 01c686b3 add a3,a3,t3 + q1 = 0; +80006320: 00000593 li a1,0 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006324: dad57ce3 bleu a3,a0,800060dc <__udivdi3+0x1d4> + q0--; +80006328: fff70713 addi a4,a4,-1 +8000632c: cc9ff06f j 80005ff4 <__udivdi3+0xec> + q1 = 0; +80006330: 00000593 li a1,0 + q0 = 0; +80006334: 00000713 li a4,0 +80006338: da5ff06f j 800060dc <__udivdi3+0x1d4> + +8000633c <__umoddi3>: + d0 = dd.s.low; +8000633c: 00060893 mv a7,a2 + d1 = dd.s.high; +80006340: 00068713 mv a4,a3 + n0 = nn.s.low; +80006344: 00050793 mv a5,a0 + n1 = nn.s.high; +80006348: 00058813 mv a6,a1 + if (d1 == 0) +8000634c: 22069c63 bnez a3,80006584 <__umoddi3+0x248> +80006350: 800086b7 lui a3,0x80008 +80006354: 65468693 addi a3,a3,1620 # 80008654 + if (d0 > n1) +80006358: 0cc5fc63 bleu a2,a1,80006430 <__umoddi3+0xf4> + count_leading_zeros (bm, d0); +8000635c: 00010337 lui t1,0x10 +80006360: 0a667e63 bleu t1,a2,8000641c <__umoddi3+0xe0> +80006364: 0ff00313 li t1,255 +80006368: 00c37463 bleu a2,t1,80006370 <__umoddi3+0x34> +8000636c: 00800713 li a4,8 +80006370: 00e65333 srl t1,a2,a4 +80006374: 006686b3 add a3,a3,t1 +80006378: 0006ce03 lbu t3,0(a3) +8000637c: 02000313 li t1,32 +80006380: 00ee0e33 add t3,t3,a4 +80006384: 41c30333 sub t1,t1,t3 + if (bm != 0) +80006388: 00030c63 beqz t1,800063a0 <__umoddi3+0x64> + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +8000638c: 006595b3 sll a1,a1,t1 +80006390: 01c55e33 srl t3,a0,t3 + d0 = d0 << bm; +80006394: 006618b3 sll a7,a2,t1 + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); +80006398: 00be6833 or a6,t3,a1 + n0 = n0 << bm; +8000639c: 006517b3 sll a5,a0,t1 + udiv_qrnnd (q0, n0, n1, n0, d0); +800063a0: 0108d613 srli a2,a7,0x10 +800063a4: 02c87733 remu a4,a6,a2 +800063a8: 01089513 slli a0,a7,0x10 +800063ac: 01055513 srli a0,a0,0x10 +800063b0: 0107d693 srli a3,a5,0x10 +800063b4: 02c85833 divu a6,a6,a2 +800063b8: 01071713 slli a4,a4,0x10 +800063bc: 00d766b3 or a3,a4,a3 +800063c0: 03050833 mul a6,a0,a6 +800063c4: 0106fa63 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063c8: 011686b3 add a3,a3,a7 +800063cc: 0116e663 bltu a3,a7,800063d8 <__umoddi3+0x9c> +800063d0: 0106f463 bleu a6,a3,800063d8 <__umoddi3+0x9c> +800063d4: 011686b3 add a3,a3,a7 +800063d8: 410686b3 sub a3,a3,a6 +800063dc: 02c6f733 remu a4,a3,a2 +800063e0: 01079793 slli a5,a5,0x10 +800063e4: 0107d793 srli a5,a5,0x10 +800063e8: 02c6d6b3 divu a3,a3,a2 +800063ec: 02d506b3 mul a3,a0,a3 +800063f0: 01071513 slli a0,a4,0x10 +800063f4: 00f567b3 or a5,a0,a5 +800063f8: 00d7fa63 bleu a3,a5,8000640c <__umoddi3+0xd0> +800063fc: 011787b3 add a5,a5,a7 +80006400: 0117e663 bltu a5,a7,8000640c <__umoddi3+0xd0> +80006404: 00d7f463 bleu a3,a5,8000640c <__umoddi3+0xd0> +80006408: 011787b3 add a5,a5,a7 +8000640c: 40d787b3 sub a5,a5,a3 + rr.s.low = n0 >> bm; +80006410: 0067d533 srl a0,a5,t1 + *rp = rr.ll; +80006414: 00000593 li a1,0 +} +80006418: 00008067 ret + count_leading_zeros (bm, d0); +8000641c: 01000337 lui t1,0x1000 +80006420: 01000713 li a4,16 +80006424: f46666e3 bltu a2,t1,80006370 <__umoddi3+0x34> +80006428: 01800713 li a4,24 +8000642c: f45ff06f j 80006370 <__umoddi3+0x34> + if (d0 == 0) +80006430: 00061663 bnez a2,8000643c <__umoddi3+0x100> + d0 = 1 / d0; /* Divide intentionally by zero. */ +80006434: 00100613 li a2,1 +80006438: 031658b3 divu a7,a2,a7 + count_leading_zeros (bm, d0); +8000643c: 00010637 lui a2,0x10 +80006440: 0ac8f263 bleu a2,a7,800064e4 <__umoddi3+0x1a8> +80006444: 0ff00613 li a2,255 +80006448: 01167463 bleu a7,a2,80006450 <__umoddi3+0x114> +8000644c: 00800713 li a4,8 +80006450: 00e8d633 srl a2,a7,a4 +80006454: 00c686b3 add a3,a3,a2 +80006458: 0006ce03 lbu t3,0(a3) +8000645c: 02000313 li t1,32 +80006460: 00ee0e33 add t3,t3,a4 +80006464: 41c30333 sub t1,t1,t3 + if (bm == 0) +80006468: 08031863 bnez t1,800064f8 <__umoddi3+0x1bc> + n1 -= d0; +8000646c: 411585b3 sub a1,a1,a7 + udiv_qrnnd (q0, n0, n1, n0, d0); +80006470: 0108d713 srli a4,a7,0x10 +80006474: 01089513 slli a0,a7,0x10 +80006478: 01055513 srli a0,a0,0x10 +8000647c: 0107d613 srli a2,a5,0x10 +80006480: 02e5f6b3 remu a3,a1,a4 +80006484: 02e5d5b3 divu a1,a1,a4 +80006488: 01069693 slli a3,a3,0x10 +8000648c: 00c6e6b3 or a3,a3,a2 +80006490: 02b505b3 mul a1,a0,a1 +80006494: 00b6fa63 bleu a1,a3,800064a8 <__umoddi3+0x16c> +80006498: 011686b3 add a3,a3,a7 +8000649c: 0116e663 bltu a3,a7,800064a8 <__umoddi3+0x16c> +800064a0: 00b6f463 bleu a1,a3,800064a8 <__umoddi3+0x16c> +800064a4: 011686b3 add a3,a3,a7 +800064a8: 40b685b3 sub a1,a3,a1 +800064ac: 02e5f6b3 remu a3,a1,a4 +800064b0: 01079793 slli a5,a5,0x10 +800064b4: 0107d793 srli a5,a5,0x10 +800064b8: 02e5d5b3 divu a1,a1,a4 +800064bc: 02b505b3 mul a1,a0,a1 +800064c0: 01069513 slli a0,a3,0x10 +800064c4: 00f567b3 or a5,a0,a5 +800064c8: 00b7fa63 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064cc: 011787b3 add a5,a5,a7 +800064d0: 0117e663 bltu a5,a7,800064dc <__umoddi3+0x1a0> +800064d4: 00b7f463 bleu a1,a5,800064dc <__umoddi3+0x1a0> +800064d8: 011787b3 add a5,a5,a7 +800064dc: 40b787b3 sub a5,a5,a1 +800064e0: f31ff06f j 80006410 <__umoddi3+0xd4> + count_leading_zeros (bm, d0); +800064e4: 01000637 lui a2,0x1000 +800064e8: 01000713 li a4,16 +800064ec: f6c8e2e3 bltu a7,a2,80006450 <__umoddi3+0x114> +800064f0: 01800713 li a4,24 +800064f4: f5dff06f j 80006450 <__umoddi3+0x114> + d0 = d0 << bm; +800064f8: 006898b3 sll a7,a7,t1 + n2 = n1 >> b; +800064fc: 01c5d733 srl a4,a1,t3 + n0 = n0 << bm; +80006500: 006517b3 sll a5,a0,t1 + n1 = (n1 << bm) | (n0 >> b); +80006504: 01c55e33 srl t3,a0,t3 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006508: 0108d513 srli a0,a7,0x10 +8000650c: 02a776b3 remu a3,a4,a0 + n1 = (n1 << bm) | (n0 >> b); +80006510: 006595b3 sll a1,a1,t1 +80006514: 00be6e33 or t3,t3,a1 + udiv_qrnnd (q1, n1, n2, n1, d0); +80006518: 01089593 slli a1,a7,0x10 +8000651c: 0105d593 srli a1,a1,0x10 +80006520: 010e5613 srli a2,t3,0x10 +80006524: 02a75733 divu a4,a4,a0 +80006528: 01069693 slli a3,a3,0x10 +8000652c: 00c6e6b3 or a3,a3,a2 +80006530: 02e58733 mul a4,a1,a4 +80006534: 00e6fa63 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006538: 011686b3 add a3,a3,a7 +8000653c: 0116e663 bltu a3,a7,80006548 <__umoddi3+0x20c> +80006540: 00e6f463 bleu a4,a3,80006548 <__umoddi3+0x20c> +80006544: 011686b3 add a3,a3,a7 +80006548: 40e68633 sub a2,a3,a4 +8000654c: 02a676b3 remu a3,a2,a0 +80006550: 010e1e13 slli t3,t3,0x10 +80006554: 010e5e13 srli t3,t3,0x10 +80006558: 02a65633 divu a2,a2,a0 +8000655c: 01069693 slli a3,a3,0x10 +80006560: 02c58633 mul a2,a1,a2 +80006564: 01c6e5b3 or a1,a3,t3 +80006568: 00c5fa63 bleu a2,a1,8000657c <__umoddi3+0x240> +8000656c: 011585b3 add a1,a1,a7 +80006570: 0115e663 bltu a1,a7,8000657c <__umoddi3+0x240> +80006574: 00c5f463 bleu a2,a1,8000657c <__umoddi3+0x240> +80006578: 011585b3 add a1,a1,a7 +8000657c: 40c585b3 sub a1,a1,a2 +80006580: ef1ff06f j 80006470 <__umoddi3+0x134> + if (d1 > n1) +80006584: e8d5eae3 bltu a1,a3,80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +80006588: 00010737 lui a4,0x10 +8000658c: 04e6fc63 bleu a4,a3,800065e4 <__umoddi3+0x2a8> +80006590: 0ff00e93 li t4,255 +80006594: 00deb733 sltu a4,t4,a3 +80006598: 00371713 slli a4,a4,0x3 +8000659c: 80008337 lui t1,0x80008 +800065a0: 00e6d8b3 srl a7,a3,a4 +800065a4: 65430313 addi t1,t1,1620 # 80008654 +800065a8: 006888b3 add a7,a7,t1 +800065ac: 0008ce83 lbu t4,0(a7) # 1000000 +800065b0: 02000e13 li t3,32 +800065b4: 00ee8eb3 add t4,t4,a4 +800065b8: 41de0e33 sub t3,t3,t4 + if (bm == 0) +800065bc: 020e1e63 bnez t3,800065f8 <__umoddi3+0x2bc> + if (n1 > d1 || n0 >= d0) +800065c0: 00b6e463 bltu a3,a1,800065c8 <__umoddi3+0x28c> +800065c4: 00c56a63 bltu a0,a2,800065d8 <__umoddi3+0x29c> + sub_ddmmss (n1, n0, n1, n0, d1, d0); +800065c8: 40c507b3 sub a5,a0,a2 +800065cc: 40d585b3 sub a1,a1,a3 +800065d0: 00f53533 sltu a0,a0,a5 +800065d4: 40a58833 sub a6,a1,a0 + *rp = rr.ll; +800065d8: 00078513 mv a0,a5 +800065dc: 00080593 mv a1,a6 +800065e0: e39ff06f j 80006418 <__umoddi3+0xdc> + count_leading_zeros (bm, d1); +800065e4: 010008b7 lui a7,0x1000 +800065e8: 01000713 li a4,16 +800065ec: fb16e8e3 bltu a3,a7,8000659c <__umoddi3+0x260> +800065f0: 01800713 li a4,24 +800065f4: fa9ff06f j 8000659c <__umoddi3+0x260> + d1 = (d1 << bm) | (d0 >> b); +800065f8: 01d65733 srl a4,a2,t4 +800065fc: 01c696b3 sll a3,a3,t3 +80006600: 00d766b3 or a3,a4,a3 + n1 = (n1 << bm) | (n0 >> b); +80006604: 01d557b3 srl a5,a0,t4 + n2 = n1 >> b; +80006608: 01d5d733 srl a4,a1,t4 + n1 = (n1 << bm) | (n0 >> b); +8000660c: 01c595b3 sll a1,a1,t3 +80006610: 00b7e7b3 or a5,a5,a1 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006614: 0106d593 srli a1,a3,0x10 +80006618: 02b77333 remu t1,a4,a1 +8000661c: 01069f13 slli t5,a3,0x10 +80006620: 010f5f13 srli t5,t5,0x10 +80006624: 0107d893 srli a7,a5,0x10 + d0 = d0 << bm; +80006628: 01c61633 sll a2,a2,t3 + n0 = n0 << bm; +8000662c: 01c51533 sll a0,a0,t3 + udiv_qrnnd (q0, n1, n2, n1, d1); +80006630: 02b75733 divu a4,a4,a1 +80006634: 01031313 slli t1,t1,0x10 +80006638: 011368b3 or a7,t1,a7 +8000663c: 02ef0833 mul a6,t5,a4 +80006640: 00070313 mv t1,a4 +80006644: 0108fe63 bleu a6,a7,80006660 <__umoddi3+0x324> +80006648: 00d888b3 add a7,a7,a3 +8000664c: fff70313 addi t1,a4,-1 # ffff +80006650: 00d8e863 bltu a7,a3,80006660 <__umoddi3+0x324> +80006654: 0108f663 bleu a6,a7,80006660 <__umoddi3+0x324> +80006658: ffe70313 addi t1,a4,-2 +8000665c: 00d888b3 add a7,a7,a3 +80006660: 410888b3 sub a7,a7,a6 +80006664: 02b8ffb3 remu t6,a7,a1 +80006668: 02b8d8b3 divu a7,a7,a1 +8000666c: 010f9f93 slli t6,t6,0x10 +80006670: 031f05b3 mul a1,t5,a7 +80006674: 01079f13 slli t5,a5,0x10 +80006678: 010f5f13 srli t5,t5,0x10 +8000667c: 01efef33 or t5,t6,t5 +80006680: 00088713 mv a4,a7 +80006684: 00bf7e63 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006688: 00df0f33 add t5,t5,a3 +8000668c: fff88713 addi a4,a7,-1 # ffffff +80006690: 00df6863 bltu t5,a3,800066a0 <__umoddi3+0x364> +80006694: 00bf7663 bleu a1,t5,800066a0 <__umoddi3+0x364> +80006698: ffe88713 addi a4,a7,-2 +8000669c: 00df0f33 add t5,t5,a3 +800066a0: 01031313 slli t1,t1,0x10 + umul_ppmm (m1, m0, q0, d0); +800066a4: 000108b7 lui a7,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066a8: 00e36333 or t1,t1,a4 + umul_ppmm (m1, m0, q0, d0); +800066ac: fff88793 addi a5,a7,-1 # ffff +800066b0: 01065813 srli a6,a2,0x10 + udiv_qrnnd (q0, n1, n2, n1, d1); +800066b4: 40bf0f33 sub t5,t5,a1 + umul_ppmm (m1, m0, q0, d0); +800066b8: 00f375b3 and a1,t1,a5 +800066bc: 01035313 srli t1,t1,0x10 +800066c0: 00f677b3 and a5,a2,a5 +800066c4: 02f58733 mul a4,a1,a5 +800066c8: 02f307b3 mul a5,t1,a5 +800066cc: 030585b3 mul a1,a1,a6 +800066d0: 03030333 mul t1,t1,a6 +800066d4: 00f585b3 add a1,a1,a5 +800066d8: 01075813 srli a6,a4,0x10 +800066dc: 00b80833 add a6,a6,a1 +800066e0: 00f87463 bleu a5,a6,800066e8 <__umoddi3+0x3ac> +800066e4: 01130333 add t1,t1,a7 +800066e8: 000107b7 lui a5,0x10 +800066ec: fff78793 addi a5,a5,-1 # ffff +800066f0: 01085593 srli a1,a6,0x10 +800066f4: 00f87833 and a6,a6,a5 +800066f8: 01081813 slli a6,a6,0x10 +800066fc: 00f77733 and a4,a4,a5 +80006700: 006585b3 add a1,a1,t1 +80006704: 00e80733 add a4,a6,a4 + if (m1 > n1 || (m1 == n1 && m0 > n0)) +80006708: 00bf6663 bltu t5,a1,80006714 <__umoddi3+0x3d8> +8000670c: 00bf1e63 bne t5,a1,80006728 <__umoddi3+0x3ec> +80006710: 00e57c63 bleu a4,a0,80006728 <__umoddi3+0x3ec> + sub_ddmmss (m1, m0, m1, m0, d1, d0); +80006714: 40c70633 sub a2,a4,a2 +80006718: 00c73733 sltu a4,a4,a2 +8000671c: 40d585b3 sub a1,a1,a3 +80006720: 40e585b3 sub a1,a1,a4 +80006724: 00060713 mv a4,a2 + sub_ddmmss (n1, n0, n1, n0, m1, m0); +80006728: 40e50733 sub a4,a0,a4 +8000672c: 00e53533 sltu a0,a0,a4 +80006730: 40bf05b3 sub a1,t5,a1 +80006734: 40a585b3 sub a1,a1,a0 + rr.s.low = (n1 << b) | (n0 >> bm); +80006738: 01d597b3 sll a5,a1,t4 +8000673c: 01c75733 srl a4,a4,t3 + *rp = rr.ll; +80006740: 00e7e533 or a0,a5,a4 +80006744: 01c5d5b3 srl a1,a1,t3 + return w; +80006748: cd1ff06f j 80006418 <__umoddi3+0xdc> + +8000674c <__mulsf3>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ +8000674c: fe010113 addi sp,sp,-32 +80006750: 00912a23 sw s1,20(sp) +80006754: 01212823 sw s2,16(sp) + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); +80006758: 008004b7 lui s1,0x800 +8000675c: 01755913 srli s2,a0,0x17 +{ +80006760: 01312623 sw s3,12(sp) +80006764: 01512223 sw s5,4(sp) + FP_UNPACK_S (A, a); +80006768: fff48493 addi s1,s1,-1 # 7fffff +{ +8000676c: 00112e23 sw ra,28(sp) +80006770: 00812c23 sw s0,24(sp) +80006774: 01412423 sw s4,8(sp) +80006778: 0ff97913 andi s2,s2,255 +8000677c: 00058a93 mv s5,a1 + FP_UNPACK_S (A, a); +80006780: 00a4f4b3 and s1,s1,a0 +80006784: 01f55993 srli s3,a0,0x1f +80006788: 08090863 beqz s2,80006818 <__mulsf3+0xcc> +8000678c: 0ff00793 li a5,255 +80006790: 0af90463 beq s2,a5,80006838 <__mulsf3+0xec> +80006794: 00349493 slli s1,s1,0x3 +80006798: 040007b7 lui a5,0x4000 +8000679c: 00f4e4b3 or s1,s1,a5 +800067a0: f8190913 addi s2,s2,-127 +800067a4: 00000a13 li s4,0 +800067a8: 017ad513 srli a0,s5,0x17 + FP_UNPACK_S (B, b); +800067ac: 00800437 lui s0,0x800 +800067b0: fff40413 addi s0,s0,-1 # 7fffff +800067b4: 0ff57513 andi a0,a0,255 +800067b8: 01547433 and s0,s0,s5 +800067bc: 01fada93 srli s5,s5,0x1f +800067c0: 08050c63 beqz a0,80006858 <__mulsf3+0x10c> +800067c4: 0ff00793 li a5,255 +800067c8: 0af50863 beq a0,a5,80006878 <__mulsf3+0x12c> +800067cc: 00341413 slli s0,s0,0x3 +800067d0: 040007b7 lui a5,0x4000 +800067d4: 00f46433 or s0,s0,a5 +800067d8: f8150513 addi a0,a0,-127 +800067dc: 00000693 li a3,0 + FP_MUL_S (R, A, B); +800067e0: 002a1793 slli a5,s4,0x2 +800067e4: 00d7e7b3 or a5,a5,a3 +800067e8: 00a90533 add a0,s2,a0 +800067ec: fff78793 addi a5,a5,-1 # 3ffffff +800067f0: 00e00713 li a4,14 +800067f4: 0159c633 xor a2,s3,s5 +800067f8: 00150813 addi a6,a0,1 +800067fc: 08f76e63 bltu a4,a5,80006898 <__mulsf3+0x14c> +80006800: 80008737 lui a4,0x80008 +80006804: 00279793 slli a5,a5,0x2 +80006808: 61870713 addi a4,a4,1560 # 80008618 +8000680c: 00e787b3 add a5,a5,a4 +80006810: 0007a783 lw a5,0(a5) +80006814: 00078067 jr a5 + FP_UNPACK_S (A, a); +80006818: 02048a63 beqz s1,8000684c <__mulsf3+0x100> +8000681c: 00048513 mv a0,s1 +80006820: 3a8000ef jal ra,80006bc8 <__clzsi2> +80006824: ffb50793 addi a5,a0,-5 +80006828: f8a00913 li s2,-118 +8000682c: 00f494b3 sll s1,s1,a5 +80006830: 40a90933 sub s2,s2,a0 +80006834: f71ff06f j 800067a4 <__mulsf3+0x58> +80006838: 0ff00913 li s2,255 +8000683c: 00200a13 li s4,2 +80006840: f60484e3 beqz s1,800067a8 <__mulsf3+0x5c> +80006844: 00300a13 li s4,3 +80006848: f61ff06f j 800067a8 <__mulsf3+0x5c> +8000684c: 00000913 li s2,0 +80006850: 00100a13 li s4,1 +80006854: f55ff06f j 800067a8 <__mulsf3+0x5c> + FP_UNPACK_S (B, b); +80006858: 02040a63 beqz s0,8000688c <__mulsf3+0x140> +8000685c: 00040513 mv a0,s0 +80006860: 368000ef jal ra,80006bc8 <__clzsi2> +80006864: ffb50793 addi a5,a0,-5 +80006868: 00f41433 sll s0,s0,a5 +8000686c: f8a00793 li a5,-118 +80006870: 40a78533 sub a0,a5,a0 +80006874: f69ff06f j 800067dc <__mulsf3+0x90> +80006878: 0ff00513 li a0,255 +8000687c: 00200693 li a3,2 +80006880: f60400e3 beqz s0,800067e0 <__mulsf3+0x94> +80006884: 00300693 li a3,3 +80006888: f59ff06f j 800067e0 <__mulsf3+0x94> +8000688c: 00000513 li a0,0 +80006890: 00100693 li a3,1 +80006894: f4dff06f j 800067e0 <__mulsf3+0x94> +80006898: 000107b7 lui a5,0x10 +8000689c: fff78313 addi t1,a5,-1 # ffff + FP_MUL_S (R, A, B); +800068a0: 0104d713 srli a4,s1,0x10 +800068a4: 01045693 srli a3,s0,0x10 +800068a8: 0064f4b3 and s1,s1,t1 +800068ac: 00647433 and s0,s0,t1 +800068b0: 028488b3 mul a7,s1,s0 +800068b4: 028705b3 mul a1,a4,s0 +800068b8: 02d70433 mul s0,a4,a3 +800068bc: 029686b3 mul a3,a3,s1 +800068c0: 0108d493 srli s1,a7,0x10 +800068c4: 00b686b3 add a3,a3,a1 +800068c8: 00d484b3 add s1,s1,a3 +800068cc: 00b4f463 bleu a1,s1,800068d4 <__mulsf3+0x188> +800068d0: 00f40433 add s0,s0,a5 +800068d4: 0064f7b3 and a5,s1,t1 +800068d8: 01079793 slli a5,a5,0x10 +800068dc: 0068f8b3 and a7,a7,t1 +800068e0: 011787b3 add a5,a5,a7 +800068e4: 00679713 slli a4,a5,0x6 +800068e8: 0104d493 srli s1,s1,0x10 +800068ec: 00e03733 snez a4,a4 +800068f0: 01a7d793 srli a5,a5,0x1a +800068f4: 00848433 add s0,s1,s0 +800068f8: 00f767b3 or a5,a4,a5 +800068fc: 00641413 slli s0,s0,0x6 +80006900: 00f46433 or s0,s0,a5 +80006904: 00441793 slli a5,s0,0x4 +80006908: 0c07de63 bgez a5,800069e4 <__mulsf3+0x298> +8000690c: 00145793 srli a5,s0,0x1 +80006910: 00147413 andi s0,s0,1 +80006914: 0087e433 or s0,a5,s0 + FP_PACK_S (r, R); +80006918: 07f80713 addi a4,a6,127 +8000691c: 0ce05863 blez a4,800069ec <__mulsf3+0x2a0> +80006920: 00747793 andi a5,s0,7 +80006924: 00078a63 beqz a5,80006938 <__mulsf3+0x1ec> +80006928: 00f47793 andi a5,s0,15 +8000692c: 00400693 li a3,4 +80006930: 00d78463 beq a5,a3,80006938 <__mulsf3+0x1ec> +80006934: 00440413 addi s0,s0,4 +80006938: 00441793 slli a5,s0,0x4 +8000693c: 0007da63 bgez a5,80006950 <__mulsf3+0x204> +80006940: f80007b7 lui a5,0xf8000 +80006944: fff78793 addi a5,a5,-1 # f7ffffff +80006948: 00f47433 and s0,s0,a5 +8000694c: 08080713 addi a4,a6,128 +80006950: 0fe00793 li a5,254 +80006954: 0ee7cc63 blt a5,a4,80006a4c <__mulsf3+0x300> +80006958: 00345793 srli a5,s0,0x3 +8000695c: 0300006f j 8000698c <__mulsf3+0x240> + FP_UNPACK_S (A, a); +80006960: 00098613 mv a2,s3 + FP_MUL_S (R, A, B); +80006964: 00048413 mv s0,s1 +80006968: 000a0693 mv a3,s4 + FP_PACK_S (r, R); +8000696c: 00200793 li a5,2 +80006970: 0cf68e63 beq a3,a5,80006a4c <__mulsf3+0x300> +80006974: 00300793 li a5,3 +80006978: 0cf68263 beq a3,a5,80006a3c <__mulsf3+0x2f0> +8000697c: 00100593 li a1,1 +80006980: 00000793 li a5,0 +80006984: 00000713 li a4,0 +80006988: f8b698e3 bne a3,a1,80006918 <__mulsf3+0x1cc> +8000698c: 00800437 lui s0,0x800 +80006990: fff40413 addi s0,s0,-1 # 7fffff +80006994: 80800537 lui a0,0x80800 +80006998: 0087f7b3 and a5,a5,s0 +8000699c: fff50513 addi a0,a0,-1 # 807fffff + FP_HANDLE_EXCEPTIONS; + + return r; +} +800069a0: 01c12083 lw ra,28(sp) +800069a4: 01812403 lw s0,24(sp) + FP_PACK_S (r, R); +800069a8: 0ff77713 andi a4,a4,255 +800069ac: 00a7f7b3 and a5,a5,a0 +800069b0: 01771713 slli a4,a4,0x17 +800069b4: 01f61513 slli a0,a2,0x1f +800069b8: 00e7e7b3 or a5,a5,a4 +} +800069bc: 01412483 lw s1,20(sp) +800069c0: 01012903 lw s2,16(sp) +800069c4: 00c12983 lw s3,12(sp) +800069c8: 00812a03 lw s4,8(sp) +800069cc: 00412a83 lw s5,4(sp) +800069d0: 00a7e533 or a0,a5,a0 +800069d4: 02010113 addi sp,sp,32 +800069d8: 00008067 ret + FP_UNPACK_S (B, b); +800069dc: 000a8613 mv a2,s5 +800069e0: f8dff06f j 8000696c <__mulsf3+0x220> + FP_MUL_S (R, A, B); +800069e4: 00050813 mv a6,a0 +800069e8: f31ff06f j 80006918 <__mulsf3+0x1cc> + FP_PACK_S (r, R); +800069ec: 00100793 li a5,1 +800069f0: 40e787b3 sub a5,a5,a4 +800069f4: 01b00713 li a4,27 +800069f8: 06f74063 blt a4,a5,80006a58 <__mulsf3+0x30c> +800069fc: 09e80813 addi a6,a6,158 +80006a00: 00f457b3 srl a5,s0,a5 +80006a04: 01041433 sll s0,s0,a6 +80006a08: 00803433 snez s0,s0 +80006a0c: 0087e433 or s0,a5,s0 +80006a10: 00747793 andi a5,s0,7 +80006a14: 00078a63 beqz a5,80006a28 <__mulsf3+0x2dc> +80006a18: 00f47793 andi a5,s0,15 +80006a1c: 00400713 li a4,4 +80006a20: 00e78463 beq a5,a4,80006a28 <__mulsf3+0x2dc> +80006a24: 00440413 addi s0,s0,4 +80006a28: 00541793 slli a5,s0,0x5 +80006a2c: 0207ca63 bltz a5,80006a60 <__mulsf3+0x314> +80006a30: 00345793 srli a5,s0,0x3 +80006a34: 00000713 li a4,0 +80006a38: f55ff06f j 8000698c <__mulsf3+0x240> +80006a3c: 004007b7 lui a5,0x400 +80006a40: 0ff00713 li a4,255 +80006a44: 00000613 li a2,0 +80006a48: f45ff06f j 8000698c <__mulsf3+0x240> +80006a4c: 00000793 li a5,0 +80006a50: 0ff00713 li a4,255 +80006a54: f39ff06f j 8000698c <__mulsf3+0x240> +80006a58: 00000793 li a5,0 +80006a5c: fd9ff06f j 80006a34 <__mulsf3+0x2e8> +80006a60: 00000793 li a5,0 +80006a64: 00100713 li a4,1 +80006a68: f25ff06f j 8000698c <__mulsf3+0x240> + +80006a6c <__fixunssfsi>: +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ +80006a6c: 01755793 srli a5,a0,0x17 + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +80006a70: 00800637 lui a2,0x800 +80006a74: fff60693 addi a3,a2,-1 # 7fffff +80006a78: 0ff7f793 andi a5,a5,255 + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a7c: 07e00593 li a1,126 + FP_UNPACK_RAW_S (A, a); +80006a80: 00a6f6b3 and a3,a3,a0 +80006a84: 01f55713 srli a4,a0,0x1f + FP_TO_INT_S (r, A, SI_BITS, 0); +80006a88: 00000513 li a0,0 +80006a8c: 04f5f063 bleu a5,a1,80006acc <__fixunssfsi+0x60> +80006a90: 00071863 bnez a4,80006aa0 <__fixunssfsi+0x34> +80006a94: 09e00713 li a4,158 +80006a98: fff00513 li a0,-1 +80006a9c: 00f77463 bleu a5,a4,80006aa4 <__fixunssfsi+0x38> + FP_HANDLE_EXCEPTIONS; + + return r; +} +80006aa0: 00008067 ret + FP_TO_INT_S (r, A, SI_BITS, 0); +80006aa4: 09500713 li a4,149 +80006aa8: 00c6e533 or a0,a3,a2 +80006aac: 00f75863 ble a5,a4,80006abc <__fixunssfsi+0x50> +80006ab0: f6a78793 addi a5,a5,-150 # 3fff6a +80006ab4: 00f51533 sll a0,a0,a5 +80006ab8: 00008067 ret +80006abc: 09600713 li a4,150 +80006ac0: 40f707b3 sub a5,a4,a5 +80006ac4: 00f55533 srl a0,a0,a5 +80006ac8: 00008067 ret +80006acc: 00008067 ret + +80006ad0 <__floatunsisf>: +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ +80006ad0: ff010113 addi sp,sp,-16 +80006ad4: 00812423 sw s0,8(sp) +80006ad8: 00112623 sw ra,12(sp) +80006adc: 00050413 mv s0,a0 + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006ae0: 00000793 li a5,0 +80006ae4: 02050463 beqz a0,80006b0c <__floatunsisf+0x3c> +80006ae8: 0e0000ef jal ra,80006bc8 <__clzsi2> +80006aec: 09e00793 li a5,158 +80006af0: 40a787b3 sub a5,a5,a0 +80006af4: 09600713 li a4,150 +80006af8: 04f74a63 blt a4,a5,80006b4c <__floatunsisf+0x7c> +80006afc: 00800713 li a4,8 +80006b00: 00a75663 ble a0,a4,80006b0c <__floatunsisf+0x3c> +80006b04: ff850513 addi a0,a0,-8 +80006b08: 00a41433 sll s0,s0,a0 + FP_PACK_RAW_S (a, A); +80006b0c: 00800537 lui a0,0x800 +80006b10: fff50513 addi a0,a0,-1 # 7fffff +80006b14: 00a47433 and s0,s0,a0 +80006b18: 80800537 lui a0,0x80800 +80006b1c: fff50513 addi a0,a0,-1 # 807fffff +80006b20: 0ff7f793 andi a5,a5,255 +80006b24: 00a47433 and s0,s0,a0 +80006b28: 01779793 slli a5,a5,0x17 + FP_HANDLE_EXCEPTIONS; + + return a; +} +80006b2c: 80000537 lui a0,0x80000 + FP_PACK_RAW_S (a, A); +80006b30: 00f46433 or s0,s0,a5 +} +80006b34: fff54513 not a0,a0 +80006b38: 00a47533 and a0,s0,a0 +80006b3c: 00c12083 lw ra,12(sp) +80006b40: 00812403 lw s0,8(sp) +80006b44: 01010113 addi sp,sp,16 +80006b48: 00008067 ret + FP_FROM_INT_S (A, i, SI_BITS, USItype); +80006b4c: 09900713 li a4,153 +80006b50: 02f75063 ble a5,a4,80006b70 <__floatunsisf+0xa0> +80006b54: 01b50713 addi a4,a0,27 # 8000001b +80006b58: 00500693 li a3,5 +80006b5c: 00e41733 sll a4,s0,a4 +80006b60: 40a686b3 sub a3,a3,a0 +80006b64: 00e03733 snez a4,a4 +80006b68: 00d45433 srl s0,s0,a3 +80006b6c: 00876433 or s0,a4,s0 +80006b70: 00500713 li a4,5 +80006b74: 00a75663 ble a0,a4,80006b80 <__floatunsisf+0xb0> +80006b78: ffb50713 addi a4,a0,-5 +80006b7c: 00e41433 sll s0,s0,a4 +80006b80: fc000737 lui a4,0xfc000 +80006b84: fff70713 addi a4,a4,-1 # fbffffff +80006b88: 00747693 andi a3,s0,7 +80006b8c: 00e47733 and a4,s0,a4 +80006b90: 00068a63 beqz a3,80006ba4 <__floatunsisf+0xd4> +80006b94: 00f47413 andi s0,s0,15 +80006b98: 00400693 li a3,4 +80006b9c: 00d40463 beq s0,a3,80006ba4 <__floatunsisf+0xd4> +80006ba0: 00470713 addi a4,a4,4 +80006ba4: 00571693 slli a3,a4,0x5 +80006ba8: 0006dc63 bgez a3,80006bc0 <__floatunsisf+0xf0> +80006bac: fc0007b7 lui a5,0xfc000 +80006bb0: fff78793 addi a5,a5,-1 # fbffffff +80006bb4: 00f77733 and a4,a4,a5 +80006bb8: 09f00793 li a5,159 +80006bbc: 40a787b3 sub a5,a5,a0 +80006bc0: 00375413 srli s0,a4,0x3 +80006bc4: f49ff06f j 80006b0c <__floatunsisf+0x3c> + +80006bc8 <__clzsi2>: + count_leading_zeros (ret, x); +80006bc8: 000107b7 lui a5,0x10 +80006bcc: 02f57a63 bleu a5,a0,80006c00 <__clzsi2+0x38> +80006bd0: 0ff00793 li a5,255 +80006bd4: 00a7b7b3 sltu a5,a5,a0 +80006bd8: 00379793 slli a5,a5,0x3 +80006bdc: 02000713 li a4,32 +80006be0: 40f70733 sub a4,a4,a5 +80006be4: 00f557b3 srl a5,a0,a5 +80006be8: 80008537 lui a0,0x80008 +80006bec: 65450513 addi a0,a0,1620 # 80008654 +80006bf0: 00a787b3 add a5,a5,a0 +80006bf4: 0007c503 lbu a0,0(a5) # 10000 +} +80006bf8: 40a70533 sub a0,a4,a0 +80006bfc: 00008067 ret + count_leading_zeros (ret, x); +80006c00: 01000737 lui a4,0x1000 +80006c04: 01000793 li a5,16 +80006c08: fce56ae3 bltu a0,a4,80006bdc <__clzsi2+0x14> +80006c0c: 01800793 li a5,24 +80006c10: fcdff06f j 80006bdc <__clzsi2+0x14> + +80006c14 : +80006c14: 00a00613 li a2,10 +80006c18: 00000593 li a1,0 +80006c1c: 7150006f j 80007b30 + +80006c20 <_atoi_r>: +80006c20: 00a00693 li a3,10 +80006c24: 00000613 li a2,0 +80006c28: 6d90006f j 80007b00 <_strtol_r> + +80006c2c : +80006c2c: 00a00613 li a2,10 +80006c30: 00000593 li a1,0 +80006c34: 1bc0106f j 80007df0 + +80006c38 <_atoll_r>: +80006c38: 00a00693 li a3,10 +80006c3c: 00000613 li a2,0 +80006c40: 1800106f j 80007dc0 <_strtoll_r> + +80006c44 : +80006c44: 00058613 mv a2,a1 +80006c48: 00050593 mv a1,a0 +80006c4c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006c50: 0040006f j 80006c54 <_calloc_r> + +80006c54 <_calloc_r>: +80006c54: 02c585b3 mul a1,a1,a2 +80006c58: ff010113 addi sp,sp,-16 +80006c5c: 00812423 sw s0,8(sp) +80006c60: 00112623 sw ra,12(sp) +80006c64: 0a4000ef jal ra,80006d08 <_malloc_r> +80006c68: 00050413 mv s0,a0 +80006c6c: 04050263 beqz a0,80006cb0 <_calloc_r+0x5c> +80006c70: ffc52603 lw a2,-4(a0) +80006c74: 02400713 li a4,36 +80006c78: ffc67613 andi a2,a2,-4 +80006c7c: ffc60613 addi a2,a2,-4 +80006c80: 06c76263 bltu a4,a2,80006ce4 <_calloc_r+0x90> +80006c84: 01300693 li a3,19 +80006c88: 00050793 mv a5,a0 +80006c8c: 00c6fc63 bleu a2,a3,80006ca4 <_calloc_r+0x50> +80006c90: 00052023 sw zero,0(a0) +80006c94: 00052223 sw zero,4(a0) +80006c98: 01b00793 li a5,27 +80006c9c: 02c7e463 bltu a5,a2,80006cc4 <_calloc_r+0x70> +80006ca0: 00850793 addi a5,a0,8 +80006ca4: 0007a023 sw zero,0(a5) +80006ca8: 0007a223 sw zero,4(a5) +80006cac: 0007a423 sw zero,8(a5) +80006cb0: 00040513 mv a0,s0 +80006cb4: 00c12083 lw ra,12(sp) +80006cb8: 00812403 lw s0,8(sp) +80006cbc: 01010113 addi sp,sp,16 +80006cc0: 00008067 ret +80006cc4: 00052423 sw zero,8(a0) +80006cc8: 00052623 sw zero,12(a0) +80006ccc: 01050793 addi a5,a0,16 +80006cd0: fce61ae3 bne a2,a4,80006ca4 <_calloc_r+0x50> +80006cd4: 00052823 sw zero,16(a0) +80006cd8: 01850793 addi a5,a0,24 +80006cdc: 00052a23 sw zero,20(a0) +80006ce0: fc5ff06f j 80006ca4 <_calloc_r+0x50> +80006ce4: 00000593 li a1,0 +80006ce8: de4fe0ef jal ra,800052cc +80006cec: fc5ff06f j 80006cb0 <_calloc_r+0x5c> + +80006cf0 : +80006cf0: 00050593 mv a1,a0 +80006cf4: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006cf8: 0100006f j 80006d08 <_malloc_r> + +80006cfc : +80006cfc: 00050593 mv a1,a0 +80006d00: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80006d04: 2240106f j 80007f28 <_free_r> + +80006d08 <_malloc_r>: +80006d08: fd010113 addi sp,sp,-48 +80006d0c: 02112623 sw ra,44(sp) +80006d10: 02812423 sw s0,40(sp) +80006d14: 02912223 sw s1,36(sp) +80006d18: 03212023 sw s2,32(sp) +80006d1c: 01312e23 sw s3,28(sp) +80006d20: 01412c23 sw s4,24(sp) +80006d24: 01512a23 sw s5,20(sp) +80006d28: 01612823 sw s6,16(sp) +80006d2c: 01712623 sw s7,12(sp) +80006d30: 01812423 sw s8,8(sp) +80006d34: 00b58793 addi a5,a1,11 # 100000b +80006d38: 01600713 li a4,22 +80006d3c: 04f77463 bleu a5,a4,80006d84 <_malloc_r+0x7c> +80006d40: ff87f493 andi s1,a5,-8 +80006d44: 0404d263 bgez s1,80006d88 <_malloc_r+0x80> +80006d48: 00c00793 li a5,12 +80006d4c: 00f52023 sw a5,0(a0) +80006d50: 00000513 li a0,0 +80006d54: 02c12083 lw ra,44(sp) +80006d58: 02812403 lw s0,40(sp) +80006d5c: 02412483 lw s1,36(sp) +80006d60: 02012903 lw s2,32(sp) +80006d64: 01c12983 lw s3,28(sp) +80006d68: 01812a03 lw s4,24(sp) +80006d6c: 01412a83 lw s5,20(sp) +80006d70: 01012b03 lw s6,16(sp) +80006d74: 00c12b83 lw s7,12(sp) +80006d78: 00812c03 lw s8,8(sp) +80006d7c: 03010113 addi sp,sp,48 +80006d80: 00008067 ret +80006d84: 01000493 li s1,16 +80006d88: fcb4e0e3 bltu s1,a1,80006d48 <_malloc_r+0x40> +80006d8c: 00050993 mv s3,a0 +80006d90: 5bc000ef jal ra,8000734c <__malloc_lock> +80006d94: 80009937 lui s2,0x80009 +80006d98: 1f700793 li a5,503 +80006d9c: e2890913 addi s2,s2,-472 # 80008e28 +80006da0: 0497ea63 bltu a5,s1,80006df4 <_malloc_r+0xec> +80006da4: 00848713 addi a4,s1,8 +80006da8: 00e90733 add a4,s2,a4 +80006dac: 00472403 lw s0,4(a4) # 1000004 +80006db0: ff870693 addi a3,a4,-8 +80006db4: 0034d793 srli a5,s1,0x3 +80006db8: 00d41863 bne s0,a3,80006dc8 <_malloc_r+0xc0> +80006dbc: 00c72403 lw s0,12(a4) +80006dc0: 00278793 addi a5,a5,2 +80006dc4: 08870063 beq a4,s0,80006e44 <_malloc_r+0x13c> +80006dc8: 00442783 lw a5,4(s0) +80006dcc: 00c42703 lw a4,12(s0) +80006dd0: 00842683 lw a3,8(s0) +80006dd4: ffc7f793 andi a5,a5,-4 +80006dd8: 00f407b3 add a5,s0,a5 +80006ddc: 00e6a623 sw a4,12(a3) +80006de0: 00d72423 sw a3,8(a4) +80006de4: 0047a703 lw a4,4(a5) +80006de8: 00176713 ori a4,a4,1 +80006dec: 00e7a223 sw a4,4(a5) +80006df0: 0a80006f j 80006e98 <_malloc_r+0x190> +80006df4: 0094d713 srli a4,s1,0x9 +80006df8: 03f00793 li a5,63 +80006dfc: 00070a63 beqz a4,80006e10 <_malloc_r+0x108> +80006e00: 00400793 li a5,4 +80006e04: 0ae7e263 bltu a5,a4,80006ea8 <_malloc_r+0x1a0> +80006e08: 0064d793 srli a5,s1,0x6 +80006e0c: 03878793 addi a5,a5,56 +80006e10: 00178713 addi a4,a5,1 +80006e14: 00371713 slli a4,a4,0x3 +80006e18: 00e90733 add a4,s2,a4 +80006e1c: 00472403 lw s0,4(a4) +80006e20: ff870593 addi a1,a4,-8 +80006e24: 00f00513 li a0,15 +80006e28: 00b40c63 beq s0,a1,80006e40 <_malloc_r+0x138> +80006e2c: 00442703 lw a4,4(s0) +80006e30: ffc77713 andi a4,a4,-4 +80006e34: 40970633 sub a2,a4,s1 +80006e38: 0cc55063 ble a2,a0,80006ef8 <_malloc_r+0x1f0> +80006e3c: fff78793 addi a5,a5,-1 +80006e40: 00178793 addi a5,a5,1 +80006e44: 01092403 lw s0,16(s2) +80006e48: 800095b7 lui a1,0x80009 +80006e4c: 00890693 addi a3,s2,8 +80006e50: e3058593 addi a1,a1,-464 # 80008e30 +80006e54: 12d40863 beq s0,a3,80006f84 <_malloc_r+0x27c> +80006e58: 00442703 lw a4,4(s0) +80006e5c: 00f00613 li a2,15 +80006e60: ffc77713 andi a4,a4,-4 +80006e64: 40970533 sub a0,a4,s1 +80006e68: 0aa65a63 ble a0,a2,80006f1c <_malloc_r+0x214> +80006e6c: 0014e793 ori a5,s1,1 +80006e70: 00f42223 sw a5,4(s0) +80006e74: 00940633 add a2,s0,s1 +80006e78: 00c92a23 sw a2,20(s2) +80006e7c: 00c92823 sw a2,16(s2) +80006e80: 00156793 ori a5,a0,1 +80006e84: 00d62623 sw a3,12(a2) +80006e88: 00d62423 sw a3,8(a2) +80006e8c: 00f62223 sw a5,4(a2) +80006e90: 00e40733 add a4,s0,a4 +80006e94: 00a72023 sw a0,0(a4) +80006e98: 00098513 mv a0,s3 +80006e9c: 4b4000ef jal ra,80007350 <__malloc_unlock> +80006ea0: 00840513 addi a0,s0,8 +80006ea4: eb1ff06f j 80006d54 <_malloc_r+0x4c> +80006ea8: 01400793 li a5,20 +80006eac: 00e7e663 bltu a5,a4,80006eb8 <_malloc_r+0x1b0> +80006eb0: 05b70793 addi a5,a4,91 +80006eb4: f5dff06f j 80006e10 <_malloc_r+0x108> +80006eb8: 05400793 li a5,84 +80006ebc: 00e7e863 bltu a5,a4,80006ecc <_malloc_r+0x1c4> +80006ec0: 00c4d793 srli a5,s1,0xc +80006ec4: 06e78793 addi a5,a5,110 +80006ec8: f49ff06f j 80006e10 <_malloc_r+0x108> +80006ecc: 15400793 li a5,340 +80006ed0: 00e7e863 bltu a5,a4,80006ee0 <_malloc_r+0x1d8> +80006ed4: 00f4d793 srli a5,s1,0xf +80006ed8: 07778793 addi a5,a5,119 +80006edc: f35ff06f j 80006e10 <_malloc_r+0x108> +80006ee0: 55400693 li a3,1364 +80006ee4: 07e00793 li a5,126 +80006ee8: f2e6e4e3 bltu a3,a4,80006e10 <_malloc_r+0x108> +80006eec: 0124d793 srli a5,s1,0x12 +80006ef0: 07c78793 addi a5,a5,124 +80006ef4: f1dff06f j 80006e10 <_malloc_r+0x108> +80006ef8: 00c42683 lw a3,12(s0) +80006efc: 00064c63 bltz a2,80006f14 <_malloc_r+0x20c> +80006f00: 00842783 lw a5,8(s0) +80006f04: 00d7a623 sw a3,12(a5) +80006f08: 00f6a423 sw a5,8(a3) +80006f0c: 00e407b3 add a5,s0,a4 +80006f10: ed5ff06f j 80006de4 <_malloc_r+0xdc> +80006f14: 00068413 mv s0,a3 +80006f18: f11ff06f j 80006e28 <_malloc_r+0x120> +80006f1c: 00d92a23 sw a3,20(s2) +80006f20: 00d92823 sw a3,16(s2) +80006f24: 00054c63 bltz a0,80006f3c <_malloc_r+0x234> +80006f28: 00e40733 add a4,s0,a4 +80006f2c: 00472783 lw a5,4(a4) +80006f30: 0017e793 ori a5,a5,1 +80006f34: 00f72223 sw a5,4(a4) +80006f38: f61ff06f j 80006e98 <_malloc_r+0x190> +80006f3c: 1ff00693 li a3,511 +80006f40: 00492803 lw a6,4(s2) +80006f44: 16e6e663 bltu a3,a4,800070b0 <_malloc_r+0x3a8> +80006f48: 00375713 srli a4,a4,0x3 +80006f4c: 40275613 srai a2,a4,0x2 +80006f50: 00100693 li a3,1 +80006f54: 00170713 addi a4,a4,1 +80006f58: 00c696b3 sll a3,a3,a2 +80006f5c: 00371713 slli a4,a4,0x3 +80006f60: 00e90733 add a4,s2,a4 +80006f64: 0106e6b3 or a3,a3,a6 +80006f68: 00d92223 sw a3,4(s2) +80006f6c: 00072683 lw a3,0(a4) +80006f70: ff870613 addi a2,a4,-8 +80006f74: 00c42623 sw a2,12(s0) +80006f78: 00d42423 sw a3,8(s0) +80006f7c: 00872023 sw s0,0(a4) +80006f80: 0086a623 sw s0,12(a3) +80006f84: 4027d713 srai a4,a5,0x2 +80006f88: 00100313 li t1,1 +80006f8c: 00e31333 sll t1,t1,a4 +80006f90: 00492703 lw a4,4(s2) +80006f94: 06676a63 bltu a4,t1,80007008 <_malloc_r+0x300> +80006f98: 006776b3 and a3,a4,t1 +80006f9c: 00069c63 bnez a3,80006fb4 <_malloc_r+0x2ac> +80006fa0: ffc7f793 andi a5,a5,-4 +80006fa4: 00131313 slli t1,t1,0x1 +80006fa8: 006776b3 and a3,a4,t1 +80006fac: 00478793 addi a5,a5,4 +80006fb0: fe068ae3 beqz a3,80006fa4 <_malloc_r+0x29c> +80006fb4: 00f00e13 li t3,15 +80006fb8: 00379693 slli a3,a5,0x3 +80006fbc: 00d906b3 add a3,s2,a3 +80006fc0: 00068813 mv a6,a3 +80006fc4: 00078513 mv a0,a5 +80006fc8: 00c82403 lw s0,12(a6) +80006fcc: 1b041263 bne s0,a6,80007170 <_malloc_r+0x468> +80006fd0: 00150513 addi a0,a0,1 +80006fd4: 00357713 andi a4,a0,3 +80006fd8: 00880813 addi a6,a6,8 +80006fdc: fe0716e3 bnez a4,80006fc8 <_malloc_r+0x2c0> +80006fe0: 0037f713 andi a4,a5,3 +80006fe4: 20071463 bnez a4,800071ec <_malloc_r+0x4e4> +80006fe8: 00492703 lw a4,4(s2) +80006fec: fff34793 not a5,t1 +80006ff0: 00f777b3 and a5,a4,a5 +80006ff4: 00f92223 sw a5,4(s2) +80006ff8: 00492703 lw a4,4(s2) +80006ffc: 00131313 slli t1,t1,0x1 +80007000: 00676463 bltu a4,t1,80007008 <_malloc_r+0x300> +80007004: 20031863 bnez t1,80007214 <_malloc_r+0x50c> +80007008: 00892b83 lw s7,8(s2) +8000700c: 004ba403 lw s0,4(s7) +80007010: ffc47a93 andi s5,s0,-4 +80007014: 009ae863 bltu s5,s1,80007024 <_malloc_r+0x31c> +80007018: 409a8733 sub a4,s5,s1 +8000701c: 00f00793 li a5,15 +80007020: 30e7ca63 blt a5,a4,80007334 <_malloc_r+0x62c> +80007024: 8cc1a403 lw s0,-1844(gp) # 8000946c <__malloc_top_pad> +80007028: 8381a703 lw a4,-1992(gp) # 800093d8 <__malloc_sbrk_base> +8000702c: fff00793 li a5,-1 +80007030: 00848433 add s0,s1,s0 +80007034: 1ef71463 bne a4,a5,8000721c <_malloc_r+0x514> +80007038: 01040413 addi s0,s0,16 +8000703c: 00040593 mv a1,s0 +80007040: 00098513 mv a0,s3 +80007044: 079000ef jal ra,800078bc <_sbrk_r> +80007048: fff00793 li a5,-1 +8000704c: 00050b13 mv s6,a0 +80007050: 26f50863 beq a0,a5,800072c0 <_malloc_r+0x5b8> +80007054: 015b87b3 add a5,s7,s5 +80007058: 00f57463 bleu a5,a0,80007060 <_malloc_r+0x358> +8000705c: 272b9263 bne s7,s2,800072c0 <_malloc_r+0x5b8> +80007060: 8e818693 addi a3,gp,-1816 # 80009488 <__malloc_current_mallinfo> +80007064: 0006a703 lw a4,0(a3) +80007068: 8e818c13 addi s8,gp,-1816 # 80009488 <__malloc_current_mallinfo> +8000706c: 00e40733 add a4,s0,a4 +80007070: 00e6a023 sw a4,0(a3) +80007074: 1d679063 bne a5,s6,80007234 <_malloc_r+0x52c> +80007078: 01479693 slli a3,a5,0x14 +8000707c: 1a069c63 bnez a3,80007234 <_malloc_r+0x52c> +80007080: 00892783 lw a5,8(s2) +80007084: 008a8433 add s0,s5,s0 +80007088: 00146413 ori s0,s0,1 +8000708c: 0087a223 sw s0,4(a5) +80007090: 000c2783 lw a5,0(s8) +80007094: 8c81a683 lw a3,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +80007098: 00f6f463 bleu a5,a3,800070a0 <_malloc_r+0x398> +8000709c: 8cf1a423 sw a5,-1848(gp) # 80009468 <__malloc_max_sbrked_mem> +800070a0: 8c41a683 lw a3,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070a4: 20f6fe63 bleu a5,a3,800072c0 <_malloc_r+0x5b8> +800070a8: 8cf1a223 sw a5,-1852(gp) # 80009464 <__malloc_max_total_mem> +800070ac: 2140006f j 800072c0 <_malloc_r+0x5b8> +800070b0: 00975613 srli a2,a4,0x9 +800070b4: 00400693 li a3,4 +800070b8: 04c6e663 bltu a3,a2,80007104 <_malloc_r+0x3fc> +800070bc: 00675693 srli a3,a4,0x6 +800070c0: 03868693 addi a3,a3,56 +800070c4: 00168613 addi a2,a3,1 +800070c8: 00361613 slli a2,a2,0x3 +800070cc: 00c90633 add a2,s2,a2 +800070d0: ff860513 addi a0,a2,-8 +800070d4: 00062603 lw a2,0(a2) +800070d8: 08c51263 bne a0,a2,8000715c <_malloc_r+0x454> +800070dc: 4026d693 srai a3,a3,0x2 +800070e0: 00100713 li a4,1 +800070e4: 00d716b3 sll a3,a4,a3 +800070e8: 0106e6b3 or a3,a3,a6 +800070ec: 00d92223 sw a3,4(s2) +800070f0: 00a42623 sw a0,12(s0) +800070f4: 00c42423 sw a2,8(s0) +800070f8: 00852423 sw s0,8(a0) +800070fc: 00862623 sw s0,12(a2) +80007100: e85ff06f j 80006f84 <_malloc_r+0x27c> +80007104: 01400693 li a3,20 +80007108: 00c6e663 bltu a3,a2,80007114 <_malloc_r+0x40c> +8000710c: 05b60693 addi a3,a2,91 +80007110: fb5ff06f j 800070c4 <_malloc_r+0x3bc> +80007114: 05400693 li a3,84 +80007118: 00c6e863 bltu a3,a2,80007128 <_malloc_r+0x420> +8000711c: 00c75693 srli a3,a4,0xc +80007120: 06e68693 addi a3,a3,110 +80007124: fa1ff06f j 800070c4 <_malloc_r+0x3bc> +80007128: 15400693 li a3,340 +8000712c: 00c6e863 bltu a3,a2,8000713c <_malloc_r+0x434> +80007130: 00f75693 srli a3,a4,0xf +80007134: 07768693 addi a3,a3,119 +80007138: f8dff06f j 800070c4 <_malloc_r+0x3bc> +8000713c: 55400513 li a0,1364 +80007140: 07e00693 li a3,126 +80007144: f8c560e3 bltu a0,a2,800070c4 <_malloc_r+0x3bc> +80007148: 01275693 srli a3,a4,0x12 +8000714c: 07c68693 addi a3,a3,124 +80007150: f75ff06f j 800070c4 <_malloc_r+0x3bc> +80007154: 00862603 lw a2,8(a2) +80007158: 00c50863 beq a0,a2,80007168 <_malloc_r+0x460> +8000715c: 00462683 lw a3,4(a2) +80007160: ffc6f693 andi a3,a3,-4 +80007164: fed768e3 bltu a4,a3,80007154 <_malloc_r+0x44c> +80007168: 00c62503 lw a0,12(a2) +8000716c: f85ff06f j 800070f0 <_malloc_r+0x3e8> +80007170: 00442703 lw a4,4(s0) +80007174: 00c42603 lw a2,12(s0) +80007178: ffc77713 andi a4,a4,-4 +8000717c: 409708b3 sub a7,a4,s1 +80007180: 051e5063 ble a7,t3,800071c0 <_malloc_r+0x4b8> +80007184: 0014e793 ori a5,s1,1 +80007188: 00f42223 sw a5,4(s0) +8000718c: 00842783 lw a5,8(s0) +80007190: 009406b3 add a3,s0,s1 +80007194: 00e40733 add a4,s0,a4 +80007198: 00c7a623 sw a2,12(a5) +8000719c: 00f62423 sw a5,8(a2) +800071a0: 00d92a23 sw a3,20(s2) +800071a4: 00d92823 sw a3,16(s2) +800071a8: 0018e793 ori a5,a7,1 +800071ac: 00b6a623 sw a1,12(a3) +800071b0: 00b6a423 sw a1,8(a3) +800071b4: 00f6a223 sw a5,4(a3) +800071b8: 01172023 sw a7,0(a4) +800071bc: cddff06f j 80006e98 <_malloc_r+0x190> +800071c0: 0208c263 bltz a7,800071e4 <_malloc_r+0x4dc> +800071c4: 00e40733 add a4,s0,a4 +800071c8: 00472783 lw a5,4(a4) +800071cc: 0017e793 ori a5,a5,1 +800071d0: 00f72223 sw a5,4(a4) +800071d4: 00842783 lw a5,8(s0) +800071d8: 00c7a623 sw a2,12(a5) +800071dc: 00f62423 sw a5,8(a2) +800071e0: cb9ff06f j 80006e98 <_malloc_r+0x190> +800071e4: 00060413 mv s0,a2 +800071e8: de5ff06f j 80006fcc <_malloc_r+0x2c4> +800071ec: ff868713 addi a4,a3,-8 +800071f0: 0006a683 lw a3,0(a3) +800071f4: fff78793 addi a5,a5,-1 +800071f8: dee684e3 beq a3,a4,80006fe0 <_malloc_r+0x2d8> +800071fc: dfdff06f j 80006ff8 <_malloc_r+0x2f0> +80007200: 00478793 addi a5,a5,4 +80007204: 00131313 slli t1,t1,0x1 +80007208: 006776b3 and a3,a4,t1 +8000720c: fe068ae3 beqz a3,80007200 <_malloc_r+0x4f8> +80007210: da9ff06f j 80006fb8 <_malloc_r+0x2b0> +80007214: 00050793 mv a5,a0 +80007218: ff1ff06f j 80007208 <_malloc_r+0x500> +8000721c: 000017b7 lui a5,0x1 +80007220: 00f78793 addi a5,a5,15 # 100f +80007224: 00f40433 add s0,s0,a5 +80007228: fffff7b7 lui a5,0xfffff +8000722c: 00f47433 and s0,s0,a5 +80007230: e0dff06f j 8000703c <_malloc_r+0x334> +80007234: 8381a603 lw a2,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007238: fff00693 li a3,-1 +8000723c: 0ad61663 bne a2,a3,800072e8 <_malloc_r+0x5e0> +80007240: 8361ac23 sw s6,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007244: 007b7593 andi a1,s6,7 +80007248: 00058863 beqz a1,80007258 <_malloc_r+0x550> +8000724c: 00800793 li a5,8 +80007250: 40b785b3 sub a1,a5,a1 +80007254: 00bb0b33 add s6,s6,a1 +80007258: 000017b7 lui a5,0x1 +8000725c: 00f585b3 add a1,a1,a5 +80007260: 008b0433 add s0,s6,s0 +80007264: fff78793 addi a5,a5,-1 # fff +80007268: 00f47433 and s0,s0,a5 +8000726c: 40858a33 sub s4,a1,s0 +80007270: 000a0593 mv a1,s4 +80007274: 00098513 mv a0,s3 +80007278: 644000ef jal ra,800078bc <_sbrk_r> +8000727c: fff00793 li a5,-1 +80007280: 00f51663 bne a0,a5,8000728c <_malloc_r+0x584> +80007284: 000b0513 mv a0,s6 +80007288: 00000a13 li s4,0 +8000728c: 000c2783 lw a5,0(s8) +80007290: 41650533 sub a0,a0,s6 +80007294: 01692423 sw s6,8(s2) +80007298: 014787b3 add a5,a5,s4 +8000729c: 01450a33 add s4,a0,s4 +800072a0: 001a6a13 ori s4,s4,1 +800072a4: 00fc2023 sw a5,0(s8) +800072a8: 014b2223 sw s4,4(s6) +800072ac: df2b82e3 beq s7,s2,80007090 <_malloc_r+0x388> +800072b0: 00f00713 li a4,15 +800072b4: 05576263 bltu a4,s5,800072f8 <_malloc_r+0x5f0> +800072b8: 00100793 li a5,1 +800072bc: 00fb2223 sw a5,4(s6) +800072c0: 00892783 lw a5,8(s2) +800072c4: 0047a783 lw a5,4(a5) +800072c8: ffc7f793 andi a5,a5,-4 +800072cc: 40978733 sub a4,a5,s1 +800072d0: 0097e663 bltu a5,s1,800072dc <_malloc_r+0x5d4> +800072d4: 00f00793 li a5,15 +800072d8: 04e7ce63 blt a5,a4,80007334 <_malloc_r+0x62c> +800072dc: 00098513 mv a0,s3 +800072e0: 070000ef jal ra,80007350 <__malloc_unlock> +800072e4: a6dff06f j 80006d50 <_malloc_r+0x48> +800072e8: 40fb07b3 sub a5,s6,a5 +800072ec: 00e787b3 add a5,a5,a4 +800072f0: 00fc2023 sw a5,0(s8) +800072f4: f51ff06f j 80007244 <_malloc_r+0x53c> +800072f8: 004ba783 lw a5,4(s7) +800072fc: ff4a8413 addi s0,s5,-12 +80007300: ff847413 andi s0,s0,-8 +80007304: 0017f793 andi a5,a5,1 +80007308: 0087e7b3 or a5,a5,s0 +8000730c: 00fba223 sw a5,4(s7) +80007310: 00500693 li a3,5 +80007314: 008b87b3 add a5,s7,s0 +80007318: 00d7a223 sw a3,4(a5) +8000731c: 00d7a423 sw a3,8(a5) +80007320: d68778e3 bleu s0,a4,80007090 <_malloc_r+0x388> +80007324: 008b8593 addi a1,s7,8 +80007328: 00098513 mv a0,s3 +8000732c: 3fd000ef jal ra,80007f28 <_free_r> +80007330: d61ff06f j 80007090 <_malloc_r+0x388> +80007334: 00892403 lw s0,8(s2) +80007338: 0014e793 ori a5,s1,1 +8000733c: 00f42223 sw a5,4(s0) +80007340: 009407b3 add a5,s0,s1 +80007344: 00f92423 sw a5,8(s2) +80007348: aa1ff06f j 80006de8 <_malloc_r+0xe0> + +8000734c <__malloc_lock>: +8000734c: 00008067 ret + +80007350 <__malloc_unlock>: +80007350: 00008067 ret + +80007354 : +80007354: 00058613 mv a2,a1 +80007358: 00050593 mv a1,a0 +8000735c: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007360: 0040006f j 80007364 <_realloc_r> + +80007364 <_realloc_r>: +80007364: fc010113 addi sp,sp,-64 +80007368: 02812c23 sw s0,56(sp) +8000736c: 02112e23 sw ra,60(sp) +80007370: 00058413 mv s0,a1 +80007374: 02912a23 sw s1,52(sp) +80007378: 03212823 sw s2,48(sp) +8000737c: 03312623 sw s3,44(sp) +80007380: 03412423 sw s4,40(sp) +80007384: 03512223 sw s5,36(sp) +80007388: 03612023 sw s6,32(sp) +8000738c: 01712e23 sw s7,28(sp) +80007390: 01812c23 sw s8,24(sp) +80007394: 00060593 mv a1,a2 +80007398: 02041a63 bnez s0,800073cc <_realloc_r+0x68> +8000739c: 03812403 lw s0,56(sp) +800073a0: 03c12083 lw ra,60(sp) +800073a4: 03412483 lw s1,52(sp) +800073a8: 03012903 lw s2,48(sp) +800073ac: 02c12983 lw s3,44(sp) +800073b0: 02812a03 lw s4,40(sp) +800073b4: 02412a83 lw s5,36(sp) +800073b8: 02012b03 lw s6,32(sp) +800073bc: 01c12b83 lw s7,28(sp) +800073c0: 01812c03 lw s8,24(sp) +800073c4: 04010113 addi sp,sp,64 +800073c8: 941ff06f j 80006d08 <_malloc_r> +800073cc: 00050a93 mv s5,a0 +800073d0: 00c12623 sw a2,12(sp) +800073d4: f79ff0ef jal ra,8000734c <__malloc_lock> +800073d8: 00c12583 lw a1,12(sp) +800073dc: ffc42683 lw a3,-4(s0) +800073e0: 01600793 li a5,22 +800073e4: 00b58993 addi s3,a1,11 +800073e8: ff840b93 addi s7,s0,-8 +800073ec: ffc6f913 andi s2,a3,-4 +800073f0: 0537f663 bleu s3,a5,8000743c <_realloc_r+0xd8> +800073f4: ff89fb13 andi s6,s3,-8 +800073f8: 040b5463 bgez s6,80007440 <_realloc_r+0xdc> +800073fc: 00c00793 li a5,12 +80007400: 00faa023 sw a5,0(s5) +80007404: 00000a13 li s4,0 +80007408: 03c12083 lw ra,60(sp) +8000740c: 03812403 lw s0,56(sp) +80007410: 000a0513 mv a0,s4 +80007414: 03412483 lw s1,52(sp) +80007418: 03012903 lw s2,48(sp) +8000741c: 02c12983 lw s3,44(sp) +80007420: 02812a03 lw s4,40(sp) +80007424: 02412a83 lw s5,36(sp) +80007428: 02012b03 lw s6,32(sp) +8000742c: 01c12b83 lw s7,28(sp) +80007430: 01812c03 lw s8,24(sp) +80007434: 04010113 addi sp,sp,64 +80007438: 00008067 ret +8000743c: 01000b13 li s6,16 +80007440: fabb6ee3 bltu s6,a1,800073fc <_realloc_r+0x98> +80007444: 45695c63 ble s6,s2,8000789c <_realloc_r+0x538> +80007448: 80009c37 lui s8,0x80009 +8000744c: e28c0713 addi a4,s8,-472 # 80008e28 +80007450: 00872603 lw a2,8(a4) +80007454: 012b87b3 add a5,s7,s2 +80007458: 0047a703 lw a4,4(a5) +8000745c: e28c0c13 addi s8,s8,-472 +80007460: 00f60c63 beq a2,a5,80007478 <_realloc_r+0x114> +80007464: ffe77513 andi a0,a4,-2 +80007468: 00a78533 add a0,a5,a0 +8000746c: 00452503 lw a0,4(a0) +80007470: 00157513 andi a0,a0,1 +80007474: 0a051a63 bnez a0,80007528 <_realloc_r+0x1c4> +80007478: ffc77713 andi a4,a4,-4 +8000747c: 00e909b3 add s3,s2,a4 +80007480: 04f61063 bne a2,a5,800074c0 <_realloc_r+0x15c> +80007484: 010b0513 addi a0,s6,16 +80007488: 0aa9c463 blt s3,a0,80007530 <_realloc_r+0x1cc> +8000748c: 016b8bb3 add s7,s7,s6 +80007490: 416989b3 sub s3,s3,s6 +80007494: 017c2423 sw s7,8(s8) +80007498: 0019e993 ori s3,s3,1 +8000749c: 013ba223 sw s3,4(s7) +800074a0: ffc42983 lw s3,-4(s0) +800074a4: 000a8513 mv a0,s5 +800074a8: 00040a13 mv s4,s0 +800074ac: 0019f993 andi s3,s3,1 +800074b0: 0169e9b3 or s3,s3,s6 +800074b4: ff342e23 sw s3,-4(s0) +800074b8: e99ff0ef jal ra,80007350 <__malloc_unlock> +800074bc: f4dff06f j 80007408 <_realloc_r+0xa4> +800074c0: 0769c863 blt s3,s6,80007530 <_realloc_r+0x1cc> +800074c4: 00c7a703 lw a4,12(a5) +800074c8: 0087a783 lw a5,8(a5) +800074cc: 00e7a623 sw a4,12(a5) +800074d0: 00f72423 sw a5,8(a4) +800074d4: 004ba703 lw a4,4(s7) +800074d8: 416986b3 sub a3,s3,s6 +800074dc: 00f00613 li a2,15 +800074e0: 00177713 andi a4,a4,1 +800074e4: 013b87b3 add a5,s7,s3 +800074e8: 3ad67e63 bleu a3,a2,800078a4 <_realloc_r+0x540> +800074ec: 00eb69b3 or s3,s6,a4 +800074f0: 013ba223 sw s3,4(s7) +800074f4: 016b85b3 add a1,s7,s6 +800074f8: 0016e693 ori a3,a3,1 +800074fc: 00d5a223 sw a3,4(a1) +80007500: 0047a703 lw a4,4(a5) +80007504: 00858593 addi a1,a1,8 +80007508: 000a8513 mv a0,s5 +8000750c: 00176713 ori a4,a4,1 +80007510: 00e7a223 sw a4,4(a5) +80007514: 215000ef jal ra,80007f28 <_free_r> +80007518: 000a8513 mv a0,s5 +8000751c: e35ff0ef jal ra,80007350 <__malloc_unlock> +80007520: 008b8a13 addi s4,s7,8 +80007524: ee5ff06f j 80007408 <_realloc_r+0xa4> +80007528: 00000713 li a4,0 +8000752c: 00000793 li a5,0 +80007530: 0016f693 andi a3,a3,1 +80007534: 28069263 bnez a3,800077b8 <_realloc_r+0x454> +80007538: ff842483 lw s1,-8(s0) +8000753c: 409b84b3 sub s1,s7,s1 +80007540: 0044aa03 lw s4,4(s1) +80007544: ffca7a13 andi s4,s4,-4 +80007548: 012a0a33 add s4,s4,s2 +8000754c: 1a078c63 beqz a5,80007704 <_realloc_r+0x3a0> +80007550: 014709b3 add s3,a4,s4 +80007554: 0ef61663 bne a2,a5,80007640 <_realloc_r+0x2dc> +80007558: 010b0793 addi a5,s6,16 +8000755c: 1af9c463 blt s3,a5,80007704 <_realloc_r+0x3a0> +80007560: 0084a703 lw a4,8(s1) +80007564: 00c4a783 lw a5,12(s1) +80007568: ffc90613 addi a2,s2,-4 +8000756c: 00848a13 addi s4,s1,8 +80007570: 00f72623 sw a5,12(a4) +80007574: 00e7a423 sw a4,8(a5) +80007578: 02400713 li a4,36 +8000757c: 0ac76a63 bltu a4,a2,80007630 <_realloc_r+0x2cc> +80007580: 01300693 li a3,19 +80007584: 000a0793 mv a5,s4 +80007588: 02c6f263 bleu a2,a3,800075ac <_realloc_r+0x248> +8000758c: 00042783 lw a5,0(s0) +80007590: 00f4a423 sw a5,8(s1) +80007594: 00442783 lw a5,4(s0) +80007598: 00f4a623 sw a5,12(s1) +8000759c: 01b00793 li a5,27 +800075a0: 04c7ea63 bltu a5,a2,800075f4 <_realloc_r+0x290> +800075a4: 00840413 addi s0,s0,8 +800075a8: 01048793 addi a5,s1,16 +800075ac: 00042703 lw a4,0(s0) +800075b0: 00e7a023 sw a4,0(a5) +800075b4: 00442703 lw a4,4(s0) +800075b8: 00e7a223 sw a4,4(a5) +800075bc: 00842703 lw a4,8(s0) +800075c0: 00e7a423 sw a4,8(a5) +800075c4: 016487b3 add a5,s1,s6 +800075c8: 416989b3 sub s3,s3,s6 +800075cc: 00fc2423 sw a5,8(s8) +800075d0: 0019e993 ori s3,s3,1 +800075d4: 0137a223 sw s3,4(a5) +800075d8: 0044a783 lw a5,4(s1) +800075dc: 0017f793 andi a5,a5,1 +800075e0: 0167e9b3 or s3,a5,s6 +800075e4: 0134a223 sw s3,4(s1) +800075e8: 000a8513 mv a0,s5 +800075ec: d65ff0ef jal ra,80007350 <__malloc_unlock> +800075f0: e19ff06f j 80007408 <_realloc_r+0xa4> +800075f4: 00842783 lw a5,8(s0) +800075f8: 00f4a823 sw a5,16(s1) +800075fc: 00c42783 lw a5,12(s0) +80007600: 00f4aa23 sw a5,20(s1) +80007604: 00e60863 beq a2,a4,80007614 <_realloc_r+0x2b0> +80007608: 01040413 addi s0,s0,16 +8000760c: 01848793 addi a5,s1,24 +80007610: f9dff06f j 800075ac <_realloc_r+0x248> +80007614: 01042783 lw a5,16(s0) +80007618: 01840413 addi s0,s0,24 +8000761c: 00f4ac23 sw a5,24(s1) +80007620: ffc42703 lw a4,-4(s0) +80007624: 02048793 addi a5,s1,32 +80007628: 00e4ae23 sw a4,28(s1) +8000762c: f81ff06f j 800075ac <_realloc_r+0x248> +80007630: 00040593 mv a1,s0 +80007634: 000a0513 mv a0,s4 +80007638: 489000ef jal ra,800082c0 +8000763c: f89ff06f j 800075c4 <_realloc_r+0x260> +80007640: 0d69c263 blt s3,s6,80007704 <_realloc_r+0x3a0> +80007644: 00c7a703 lw a4,12(a5) +80007648: 0087a783 lw a5,8(a5) +8000764c: ffc90613 addi a2,s2,-4 +80007650: 00848513 addi a0,s1,8 +80007654: 00e7a623 sw a4,12(a5) +80007658: 00f72423 sw a5,8(a4) +8000765c: 0084a703 lw a4,8(s1) +80007660: 00c4a783 lw a5,12(s1) +80007664: 00f72623 sw a5,12(a4) +80007668: 00e7a423 sw a4,8(a5) +8000766c: 02400793 li a5,36 +80007670: 08c7e463 bltu a5,a2,800076f8 <_realloc_r+0x394> +80007674: 01300713 li a4,19 +80007678: 02c77263 bleu a2,a4,8000769c <_realloc_r+0x338> +8000767c: 00042703 lw a4,0(s0) +80007680: 00e4a423 sw a4,8(s1) +80007684: 00442703 lw a4,4(s0) +80007688: 00e4a623 sw a4,12(s1) +8000768c: 01b00713 li a4,27 +80007690: 02c76663 bltu a4,a2,800076bc <_realloc_r+0x358> +80007694: 00840413 addi s0,s0,8 +80007698: 01048513 addi a0,s1,16 +8000769c: 00042783 lw a5,0(s0) +800076a0: 00f52023 sw a5,0(a0) +800076a4: 00442783 lw a5,4(s0) +800076a8: 00f52223 sw a5,4(a0) +800076ac: 00842783 lw a5,8(s0) +800076b0: 00f52423 sw a5,8(a0) +800076b4: 00048b93 mv s7,s1 +800076b8: e1dff06f j 800074d4 <_realloc_r+0x170> +800076bc: 00842703 lw a4,8(s0) +800076c0: 00e4a823 sw a4,16(s1) +800076c4: 00c42703 lw a4,12(s0) +800076c8: 00e4aa23 sw a4,20(s1) +800076cc: 00f60863 beq a2,a5,800076dc <_realloc_r+0x378> +800076d0: 01040413 addi s0,s0,16 +800076d4: 01848513 addi a0,s1,24 +800076d8: fc5ff06f j 8000769c <_realloc_r+0x338> +800076dc: 01042783 lw a5,16(s0) +800076e0: 02048513 addi a0,s1,32 +800076e4: 01840413 addi s0,s0,24 +800076e8: 00f4ac23 sw a5,24(s1) +800076ec: ffc42783 lw a5,-4(s0) +800076f0: 00f4ae23 sw a5,28(s1) +800076f4: fa9ff06f j 8000769c <_realloc_r+0x338> +800076f8: 00040593 mv a1,s0 +800076fc: 3c5000ef jal ra,800082c0 +80007700: fb5ff06f j 800076b4 <_realloc_r+0x350> +80007704: 0b6a4a63 blt s4,s6,800077b8 <_realloc_r+0x454> +80007708: 00c4a783 lw a5,12(s1) +8000770c: 0084a703 lw a4,8(s1) +80007710: ffc90613 addi a2,s2,-4 +80007714: 00848513 addi a0,s1,8 +80007718: 00f72623 sw a5,12(a4) +8000771c: 00e7a423 sw a4,8(a5) +80007720: 02400793 li a5,36 +80007724: 08c7e463 bltu a5,a2,800077ac <_realloc_r+0x448> +80007728: 01300713 li a4,19 +8000772c: 02c77263 bleu a2,a4,80007750 <_realloc_r+0x3ec> +80007730: 00042703 lw a4,0(s0) +80007734: 00e4a423 sw a4,8(s1) +80007738: 00442703 lw a4,4(s0) +8000773c: 00e4a623 sw a4,12(s1) +80007740: 01b00713 li a4,27 +80007744: 02c76663 bltu a4,a2,80007770 <_realloc_r+0x40c> +80007748: 00840413 addi s0,s0,8 +8000774c: 01048513 addi a0,s1,16 +80007750: 00042783 lw a5,0(s0) +80007754: 00f52023 sw a5,0(a0) +80007758: 00442783 lw a5,4(s0) +8000775c: 00f52223 sw a5,4(a0) +80007760: 00842783 lw a5,8(s0) +80007764: 00f52423 sw a5,8(a0) +80007768: 000a0993 mv s3,s4 +8000776c: f49ff06f j 800076b4 <_realloc_r+0x350> +80007770: 00842703 lw a4,8(s0) +80007774: 00e4a823 sw a4,16(s1) +80007778: 00c42703 lw a4,12(s0) +8000777c: 00e4aa23 sw a4,20(s1) +80007780: 00f60863 beq a2,a5,80007790 <_realloc_r+0x42c> +80007784: 01040413 addi s0,s0,16 +80007788: 01848513 addi a0,s1,24 +8000778c: fc5ff06f j 80007750 <_realloc_r+0x3ec> +80007790: 01042783 lw a5,16(s0) +80007794: 02048513 addi a0,s1,32 +80007798: 01840413 addi s0,s0,24 +8000779c: 00f4ac23 sw a5,24(s1) +800077a0: ffc42783 lw a5,-4(s0) +800077a4: 00f4ae23 sw a5,28(s1) +800077a8: fa9ff06f j 80007750 <_realloc_r+0x3ec> +800077ac: 00040593 mv a1,s0 +800077b0: 311000ef jal ra,800082c0 +800077b4: fb5ff06f j 80007768 <_realloc_r+0x404> +800077b8: 000a8513 mv a0,s5 +800077bc: d4cff0ef jal ra,80006d08 <_malloc_r> +800077c0: 00050a13 mv s4,a0 +800077c4: e20502e3 beqz a0,800075e8 <_realloc_r+0x284> +800077c8: ffc42783 lw a5,-4(s0) +800077cc: ff850713 addi a4,a0,-8 +800077d0: ffe7f793 andi a5,a5,-2 +800077d4: 00fb87b3 add a5,s7,a5 +800077d8: 00e79a63 bne a5,a4,800077ec <_realloc_r+0x488> +800077dc: ffc52983 lw s3,-4(a0) +800077e0: ffc9f993 andi s3,s3,-4 +800077e4: 012989b3 add s3,s3,s2 +800077e8: cedff06f j 800074d4 <_realloc_r+0x170> +800077ec: ffc90613 addi a2,s2,-4 +800077f0: 02400793 li a5,36 +800077f4: 08c7ee63 bltu a5,a2,80007890 <_realloc_r+0x52c> +800077f8: 01300713 li a4,19 +800077fc: 08c77463 bleu a2,a4,80007884 <_realloc_r+0x520> +80007800: 00042703 lw a4,0(s0) +80007804: 00e52023 sw a4,0(a0) +80007808: 00442703 lw a4,4(s0) +8000780c: 00e52223 sw a4,4(a0) +80007810: 01b00713 li a4,27 +80007814: 02c76a63 bltu a4,a2,80007848 <_realloc_r+0x4e4> +80007818: 00840713 addi a4,s0,8 +8000781c: 00850793 addi a5,a0,8 +80007820: 00072683 lw a3,0(a4) +80007824: 00d7a023 sw a3,0(a5) +80007828: 00472683 lw a3,4(a4) +8000782c: 00d7a223 sw a3,4(a5) +80007830: 00872703 lw a4,8(a4) +80007834: 00e7a423 sw a4,8(a5) +80007838: 00040593 mv a1,s0 +8000783c: 000a8513 mv a0,s5 +80007840: 6e8000ef jal ra,80007f28 <_free_r> +80007844: da5ff06f j 800075e8 <_realloc_r+0x284> +80007848: 00842703 lw a4,8(s0) +8000784c: 00e52423 sw a4,8(a0) +80007850: 00c42703 lw a4,12(s0) +80007854: 00e52623 sw a4,12(a0) +80007858: 00f60863 beq a2,a5,80007868 <_realloc_r+0x504> +8000785c: 01040713 addi a4,s0,16 +80007860: 01050793 addi a5,a0,16 +80007864: fbdff06f j 80007820 <_realloc_r+0x4bc> +80007868: 01042783 lw a5,16(s0) +8000786c: 01840713 addi a4,s0,24 +80007870: 00f52823 sw a5,16(a0) +80007874: 01442683 lw a3,20(s0) +80007878: 01850793 addi a5,a0,24 +8000787c: 00d52a23 sw a3,20(a0) +80007880: fa1ff06f j 80007820 <_realloc_r+0x4bc> +80007884: 00050793 mv a5,a0 +80007888: 00040713 mv a4,s0 +8000788c: f95ff06f j 80007820 <_realloc_r+0x4bc> +80007890: 00040593 mv a1,s0 +80007894: 22d000ef jal ra,800082c0 +80007898: fa1ff06f j 80007838 <_realloc_r+0x4d4> +8000789c: 00090993 mv s3,s2 +800078a0: c35ff06f j 800074d4 <_realloc_r+0x170> +800078a4: 00e9e9b3 or s3,s3,a4 +800078a8: 013ba223 sw s3,4(s7) +800078ac: 0047a703 lw a4,4(a5) +800078b0: 00176713 ori a4,a4,1 +800078b4: 00e7a223 sw a4,4(a5) +800078b8: c61ff06f j 80007518 <_realloc_r+0x1b4> + +800078bc <_sbrk_r>: +800078bc: ff010113 addi sp,sp,-16 +800078c0: 00812423 sw s0,8(sp) +800078c4: 00912223 sw s1,4(sp) +800078c8: 00050493 mv s1,a0 +800078cc: 00058513 mv a0,a1 +800078d0: 00112623 sw ra,12(sp) +800078d4: 9001a823 sw zero,-1776(gp) # 800094b0 +800078d8: 980fe0ef jal ra,80005a58 <_sbrk> +800078dc: fff00793 li a5,-1 +800078e0: 00f51863 bne a0,a5,800078f0 <_sbrk_r+0x34> +800078e4: 9101a783 lw a5,-1776(gp) # 800094b0 +800078e8: 00078463 beqz a5,800078f0 <_sbrk_r+0x34> +800078ec: 00f4a023 sw a5,0(s1) +800078f0: 00c12083 lw ra,12(sp) +800078f4: 00812403 lw s0,8(sp) +800078f8: 00412483 lw s1,4(sp) +800078fc: 01010113 addi sp,sp,16 +80007900: 00008067 ret + +80007904 : +80007904: 02060a63 beqz a2,80007938 +80007908: 00150713 addi a4,a0,1 +8000790c: 00c50533 add a0,a0,a2 +80007910: fff74783 lbu a5,-1(a4) +80007914: 0005c683 lbu a3,0(a1) +80007918: 00d78663 beq a5,a3,80007924 +8000791c: 40d78533 sub a0,a5,a3 +80007920: 00008067 ret +80007924: fea70ce3 beq a4,a0,8000791c +80007928: 00170713 addi a4,a4,1 +8000792c: fe0788e3 beqz a5,8000791c +80007930: 00158593 addi a1,a1,1 +80007934: fddff06f j 80007910 +80007938: 00000513 li a0,0 +8000793c: 00008067 ret + +80007940 <_strtol_l.isra.0>: +80007940: fd010113 addi sp,sp,-48 +80007944: 03212023 sw s2,32(sp) +80007948: 01312e23 sw s3,28(sp) +8000794c: 02112623 sw ra,44(sp) +80007950: 02812423 sw s0,40(sp) +80007954: 02912223 sw s1,36(sp) +80007958: 00050993 mv s3,a0 +8000795c: 00058913 mv s2,a1 +80007960: 00190493 addi s1,s2,1 +80007964: fff4c403 lbu s0,-1(s1) +80007968: 00070513 mv a0,a4 +8000796c: 00d12623 sw a3,12(sp) +80007970: 00c12423 sw a2,8(sp) +80007974: 00b12223 sw a1,4(sp) +80007978: 00e12023 sw a4,0(sp) +8000797c: 099000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007980: 00850533 add a0,a0,s0 +80007984: 00154783 lbu a5,1(a0) +80007988: 00012703 lw a4,0(sp) +8000798c: 00412583 lw a1,4(sp) +80007990: 0087f793 andi a5,a5,8 +80007994: 00812603 lw a2,8(sp) +80007998: 00c12683 lw a3,12(sp) +8000799c: 0a079663 bnez a5,80007a48 <_strtol_l.isra.0+0x108> +800079a0: 02d00793 li a5,45 +800079a4: 0af41663 bne s0,a5,80007a50 <_strtol_l.isra.0+0x110> +800079a8: 00194783 lbu a5,1(s2) +800079ac: 00290493 addi s1,s2,2 +800079b0: 00100313 li t1,1 +800079b4: 12068e63 beqz a3,80007af0 <_strtol_l.isra.0+0x1b0> +800079b8: 01000713 li a4,16 +800079bc: 02e69463 bne a3,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c0: 03000713 li a4,48 +800079c4: 02e79063 bne a5,a4,800079e4 <_strtol_l.isra.0+0xa4> +800079c8: 0004c783 lbu a5,0(s1) +800079cc: 05800713 li a4,88 +800079d0: 0df7f793 andi a5,a5,223 +800079d4: 10e79663 bne a5,a4,80007ae0 <_strtol_l.isra.0+0x1a0> +800079d8: 0014c783 lbu a5,1(s1) +800079dc: 01000693 li a3,16 +800079e0: 00248493 addi s1,s1,2 +800079e4: 800008b7 lui a7,0x80000 +800079e8: 00031463 bnez t1,800079f0 <_strtol_l.isra.0+0xb0> +800079ec: fff8c893 not a7,a7 +800079f0: 02d8ff33 remu t5,a7,a3 +800079f4: 00000813 li a6,0 +800079f8: 00000513 li a0,0 +800079fc: 00900f93 li t6,9 +80007a00: 01900e93 li t4,25 +80007a04: fff00293 li t0,-1 +80007a08: 02d8de33 divu t3,a7,a3 +80007a0c: fd078713 addi a4,a5,-48 +80007a10: 06efe063 bltu t6,a4,80007a70 <_strtol_l.isra.0+0x130> +80007a14: 00070793 mv a5,a4 +80007a18: 06d7dc63 ble a3,a5,80007a90 <_strtol_l.isra.0+0x150> +80007a1c: 02580063 beq a6,t0,80007a3c <_strtol_l.isra.0+0xfc> +80007a20: fff00813 li a6,-1 +80007a24: 00ae6c63 bltu t3,a0,80007a3c <_strtol_l.isra.0+0xfc> +80007a28: 00ae1463 bne t3,a0,80007a30 <_strtol_l.isra.0+0xf0> +80007a2c: 00ff4863 blt t5,a5,80007a3c <_strtol_l.isra.0+0xfc> +80007a30: 00100813 li a6,1 +80007a34: 02a68533 mul a0,a3,a0 +80007a38: 00a78533 add a0,a5,a0 +80007a3c: 00148493 addi s1,s1,1 +80007a40: fff4c783 lbu a5,-1(s1) +80007a44: fc9ff06f j 80007a0c <_strtol_l.isra.0+0xcc> +80007a48: 00048913 mv s2,s1 +80007a4c: f15ff06f j 80007960 <_strtol_l.isra.0+0x20> +80007a50: 02b00793 li a5,43 +80007a54: 00f40863 beq s0,a5,80007a64 <_strtol_l.isra.0+0x124> +80007a58: 00040793 mv a5,s0 +80007a5c: 00000313 li t1,0 +80007a60: f55ff06f j 800079b4 <_strtol_l.isra.0+0x74> +80007a64: 00290493 addi s1,s2,2 +80007a68: 00194783 lbu a5,1(s2) +80007a6c: ff1ff06f j 80007a5c <_strtol_l.isra.0+0x11c> +80007a70: fbf78713 addi a4,a5,-65 +80007a74: 00eee663 bltu t4,a4,80007a80 <_strtol_l.isra.0+0x140> +80007a78: fc978793 addi a5,a5,-55 +80007a7c: f9dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a80: f9f78713 addi a4,a5,-97 +80007a84: 00eee663 bltu t4,a4,80007a90 <_strtol_l.isra.0+0x150> +80007a88: fa978793 addi a5,a5,-87 +80007a8c: f8dff06f j 80007a18 <_strtol_l.isra.0+0xd8> +80007a90: fff00793 li a5,-1 +80007a94: 02f81863 bne a6,a5,80007ac4 <_strtol_l.isra.0+0x184> +80007a98: 02200793 li a5,34 +80007a9c: 00f9a023 sw a5,0(s3) +80007aa0: 00088513 mv a0,a7 +80007aa4: 02061863 bnez a2,80007ad4 <_strtol_l.isra.0+0x194> +80007aa8: 02c12083 lw ra,44(sp) +80007aac: 02812403 lw s0,40(sp) +80007ab0: 02412483 lw s1,36(sp) +80007ab4: 02012903 lw s2,32(sp) +80007ab8: 01c12983 lw s3,28(sp) +80007abc: 03010113 addi sp,sp,48 +80007ac0: 00008067 ret +80007ac4: 00030463 beqz t1,80007acc <_strtol_l.isra.0+0x18c> +80007ac8: 40a00533 neg a0,a0 +80007acc: fc060ee3 beqz a2,80007aa8 <_strtol_l.isra.0+0x168> +80007ad0: 00080463 beqz a6,80007ad8 <_strtol_l.isra.0+0x198> +80007ad4: fff48593 addi a1,s1,-1 +80007ad8: 00b62023 sw a1,0(a2) +80007adc: fcdff06f j 80007aa8 <_strtol_l.isra.0+0x168> +80007ae0: 03000793 li a5,48 +80007ae4: f00690e3 bnez a3,800079e4 <_strtol_l.isra.0+0xa4> +80007ae8: 00800693 li a3,8 +80007aec: ef9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> +80007af0: 03000713 li a4,48 +80007af4: ece78ae3 beq a5,a4,800079c8 <_strtol_l.isra.0+0x88> +80007af8: 00a00693 li a3,10 +80007afc: ee9ff06f j 800079e4 <_strtol_l.isra.0+0xa4> + +80007b00 <_strtol_r>: +80007b00: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b04: 0347a703 lw a4,52(a5) +80007b08: 00071663 bnez a4,80007b14 <_strtol_r+0x14> +80007b0c: 80009737 lui a4,0x80009 +80007b10: 23070713 addi a4,a4,560 # 80009230 +80007b14: e2dff06f j 80007940 <_strtol_l.isra.0> + +80007b18 : +80007b18: 00068713 mv a4,a3 +80007b1c: 00060693 mv a3,a2 +80007b20: 00058613 mv a2,a1 +80007b24: 00050593 mv a1,a0 +80007b28: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007b2c: e15ff06f j 80007940 <_strtol_l.isra.0> + +80007b30 : +80007b30: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007b34: 00060693 mv a3,a2 +80007b38: 0347a703 lw a4,52(a5) +80007b3c: 00071663 bnez a4,80007b48 +80007b40: 80009737 lui a4,0x80009 +80007b44: 23070713 addi a4,a4,560 # 80009230 +80007b48: 00058613 mv a2,a1 +80007b4c: 00050593 mv a1,a0 +80007b50: 00078513 mv a0,a5 +80007b54: dedff06f j 80007940 <_strtol_l.isra.0> + +80007b58 <_strtoll_l.isra.0>: +80007b58: fc010113 addi sp,sp,-64 +80007b5c: 02812c23 sw s0,56(sp) +80007b60: 02912a23 sw s1,52(sp) +80007b64: 03312623 sw s3,44(sp) +80007b68: 03512223 sw s5,36(sp) +80007b6c: 03612023 sw s6,32(sp) +80007b70: 02112e23 sw ra,60(sp) +80007b74: 03212823 sw s2,48(sp) +80007b78: 03412423 sw s4,40(sp) +80007b7c: 01712e23 sw s7,28(sp) +80007b80: 01812c23 sw s8,24(sp) +80007b84: 01912a23 sw s9,20(sp) +80007b88: 01a12823 sw s10,16(sp) +80007b8c: 00050493 mv s1,a0 +80007b90: 00058a93 mv s5,a1 +80007b94: 00060b13 mv s6,a2 +80007b98: 00068993 mv s3,a3 +80007b9c: 00058413 mv s0,a1 +80007ba0: 00140a13 addi s4,s0,1 +80007ba4: fffa4903 lbu s2,-1(s4) +80007ba8: 00070513 mv a0,a4 +80007bac: 00e12623 sw a4,12(sp) +80007bb0: 664000ef jal ra,80008214 <__locale_ctype_ptr_l> +80007bb4: 01250533 add a0,a0,s2 +80007bb8: 00154783 lbu a5,1(a0) +80007bbc: 00c12703 lw a4,12(sp) +80007bc0: 0087f793 andi a5,a5,8 +80007bc4: 12079263 bnez a5,80007ce8 <_strtoll_l.isra.0+0x190> +80007bc8: 02d00793 li a5,45 +80007bcc: 12f91263 bne s2,a5,80007cf0 <_strtoll_l.isra.0+0x198> +80007bd0: 00144903 lbu s2,1(s0) +80007bd4: 00240a13 addi s4,s0,2 +80007bd8: 00100b93 li s7,1 +80007bdc: 1c098a63 beqz s3,80007db0 <_strtoll_l.isra.0+0x258> +80007be0: 01000793 li a5,16 +80007be4: 02f99463 bne s3,a5,80007c0c <_strtoll_l.isra.0+0xb4> +80007be8: 03000713 li a4,48 +80007bec: 02e91063 bne s2,a4,80007c0c <_strtoll_l.isra.0+0xb4> +80007bf0: 000a4783 lbu a5,0(s4) +80007bf4: 05800713 li a4,88 +80007bf8: 0df7f793 andi a5,a5,223 +80007bfc: 1ae79263 bne a5,a4,80007da0 <_strtoll_l.isra.0+0x248> +80007c00: 001a4903 lbu s2,1(s4) +80007c04: 01000993 li s3,16 +80007c08: 002a0a13 addi s4,s4,2 +80007c0c: 00000c13 li s8,0 +80007c10: 80000437 lui s0,0x80000 +80007c14: 000b9663 bnez s7,80007c20 <_strtoll_l.isra.0+0xc8> +80007c18: fff00c13 li s8,-1 +80007c1c: fff44413 not s0,s0 +80007c20: 41f9dc93 srai s9,s3,0x1f +80007c24: 00098613 mv a2,s3 +80007c28: 000c8693 mv a3,s9 +80007c2c: 000c0513 mv a0,s8 +80007c30: 00040593 mv a1,s0 +80007c34: f08fe0ef jal ra,8000633c <__umoddi3> +80007c38: 00050d13 mv s10,a0 +80007c3c: 00098613 mv a2,s3 +80007c40: 000c8693 mv a3,s9 +80007c44: 000c0513 mv a0,s8 +80007c48: 00040593 mv a1,s0 +80007c4c: abcfe0ef jal ra,80005f08 <__udivdi3> +80007c50: 00050313 mv t1,a0 +80007c54: 00058893 mv a7,a1 +80007c58: 00000713 li a4,0 +80007c5c: 00000513 li a0,0 +80007c60: 00000593 li a1,0 +80007c64: 00900e93 li t4,9 +80007c68: 01900e13 li t3,25 +80007c6c: fff00f13 li t5,-1 +80007c70: fd090793 addi a5,s2,-48 +80007c74: 00fef863 bleu a5,t4,80007c84 <_strtoll_l.isra.0+0x12c> +80007c78: fbf90793 addi a5,s2,-65 +80007c7c: 08fe6863 bltu t3,a5,80007d0c <_strtoll_l.isra.0+0x1b4> +80007c80: fc990793 addi a5,s2,-55 +80007c84: 0b37d063 ble s3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007c88: 05e70a63 beq a4,t5,80007cdc <_strtoll_l.isra.0+0x184> +80007c8c: 08b8e863 bltu a7,a1,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c90: 01159463 bne a1,a7,80007c98 <_strtoll_l.isra.0+0x140> +80007c94: 08a36463 bltu t1,a0,80007d1c <_strtoll_l.isra.0+0x1c4> +80007c98: 00a31863 bne t1,a0,80007ca8 <_strtoll_l.isra.0+0x150> +80007c9c: 00b89663 bne a7,a1,80007ca8 <_strtoll_l.isra.0+0x150> +80007ca0: fff00713 li a4,-1 +80007ca4: 02fd4c63 blt s10,a5,80007cdc <_strtoll_l.isra.0+0x184> +80007ca8: 02ac8733 mul a4,s9,a0 +80007cac: 41f7d813 srai a6,a5,0x1f +80007cb0: 033585b3 mul a1,a1,s3 +80007cb4: 02a98633 mul a2,s3,a0 +80007cb8: 00b70733 add a4,a4,a1 +80007cbc: 02a9b533 mulhu a0,s3,a0 +80007cc0: 00c786b3 add a3,a5,a2 +80007cc4: 00f6b7b3 sltu a5,a3,a5 +80007cc8: 00a70733 add a4,a4,a0 +80007ccc: 00e80733 add a4,a6,a4 +80007cd0: 00e785b3 add a1,a5,a4 +80007cd4: 00068513 mv a0,a3 +80007cd8: 00100713 li a4,1 +80007cdc: 001a0a13 addi s4,s4,1 +80007ce0: fffa4903 lbu s2,-1(s4) +80007ce4: f8dff06f j 80007c70 <_strtoll_l.isra.0+0x118> +80007ce8: 000a0413 mv s0,s4 +80007cec: eb5ff06f j 80007ba0 <_strtoll_l.isra.0+0x48> +80007cf0: 02b00793 li a5,43 +80007cf4: 00f90663 beq s2,a5,80007d00 <_strtoll_l.isra.0+0x1a8> +80007cf8: 00000b93 li s7,0 +80007cfc: ee1ff06f j 80007bdc <_strtoll_l.isra.0+0x84> +80007d00: 00240a13 addi s4,s0,2 # 80000002 +80007d04: 00144903 lbu s2,1(s0) +80007d08: ff1ff06f j 80007cf8 <_strtoll_l.isra.0+0x1a0> +80007d0c: f9f90793 addi a5,s2,-97 +80007d10: 00fe6a63 bltu t3,a5,80007d24 <_strtoll_l.isra.0+0x1cc> +80007d14: fa990793 addi a5,s2,-87 +80007d18: f6dff06f j 80007c84 <_strtoll_l.isra.0+0x12c> +80007d1c: fff00713 li a4,-1 +80007d20: fbdff06f j 80007cdc <_strtoll_l.isra.0+0x184> +80007d24: fff00793 li a5,-1 +80007d28: 04f71863 bne a4,a5,80007d78 <_strtoll_l.isra.0+0x220> +80007d2c: 02200793 li a5,34 +80007d30: 00f4a023 sw a5,0(s1) +80007d34: 000c0513 mv a0,s8 +80007d38: 00040593 mv a1,s0 +80007d3c: 040b1c63 bnez s6,80007d94 <_strtoll_l.isra.0+0x23c> +80007d40: 03c12083 lw ra,60(sp) +80007d44: 03812403 lw s0,56(sp) +80007d48: 03412483 lw s1,52(sp) +80007d4c: 03012903 lw s2,48(sp) +80007d50: 02c12983 lw s3,44(sp) +80007d54: 02812a03 lw s4,40(sp) +80007d58: 02412a83 lw s5,36(sp) +80007d5c: 02012b03 lw s6,32(sp) +80007d60: 01c12b83 lw s7,28(sp) +80007d64: 01812c03 lw s8,24(sp) +80007d68: 01412c83 lw s9,20(sp) +80007d6c: 01012d03 lw s10,16(sp) +80007d70: 04010113 addi sp,sp,64 +80007d74: 00008067 ret +80007d78: 000b8a63 beqz s7,80007d8c <_strtoll_l.isra.0+0x234> +80007d7c: 40a00533 neg a0,a0 +80007d80: 00a037b3 snez a5,a0 +80007d84: 40b005b3 neg a1,a1 +80007d88: 40f585b3 sub a1,a1,a5 +80007d8c: fa0b0ae3 beqz s6,80007d40 <_strtoll_l.isra.0+0x1e8> +80007d90: 00070463 beqz a4,80007d98 <_strtoll_l.isra.0+0x240> +80007d94: fffa0a93 addi s5,s4,-1 +80007d98: 015b2023 sw s5,0(s6) +80007d9c: fa5ff06f j 80007d40 <_strtoll_l.isra.0+0x1e8> +80007da0: 03000913 li s2,48 +80007da4: e60994e3 bnez s3,80007c0c <_strtoll_l.isra.0+0xb4> +80007da8: 00800993 li s3,8 +80007dac: e61ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> +80007db0: 03000713 li a4,48 +80007db4: e2e90ee3 beq s2,a4,80007bf0 <_strtoll_l.isra.0+0x98> +80007db8: 00a00993 li s3,10 +80007dbc: e51ff06f j 80007c0c <_strtoll_l.isra.0+0xb4> + +80007dc0 <_strtoll_r>: +80007dc0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007dc4: 0347a703 lw a4,52(a5) +80007dc8: 00071663 bnez a4,80007dd4 <_strtoll_r+0x14> +80007dcc: 80009737 lui a4,0x80009 +80007dd0: 23070713 addi a4,a4,560 # 80009230 +80007dd4: d85ff06f j 80007b58 <_strtoll_l.isra.0> + +80007dd8 : +80007dd8: 00068713 mv a4,a3 +80007ddc: 00060693 mv a3,a2 +80007de0: 00058613 mv a2,a1 +80007de4: 00050593 mv a1,a0 +80007de8: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80007dec: d6dff06f j 80007b58 <_strtoll_l.isra.0> + +80007df0 : +80007df0: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80007df4: 00060693 mv a3,a2 +80007df8: 0347a703 lw a4,52(a5) +80007dfc: 00071663 bnez a4,80007e08 +80007e00: 80009737 lui a4,0x80009 +80007e04: 23070713 addi a4,a4,560 # 80009230 +80007e08: 00058613 mv a2,a1 +80007e0c: 00050593 mv a1,a0 +80007e10: 00078513 mv a0,a5 +80007e14: d45ff06f j 80007b58 <_strtoll_l.isra.0> + +80007e18 <_malloc_trim_r>: +80007e18: fd010113 addi sp,sp,-48 +80007e1c: 03212023 sw s2,32(sp) +80007e20: 80009937 lui s2,0x80009 +80007e24: 02812423 sw s0,40(sp) +80007e28: 02912223 sw s1,36(sp) +80007e2c: 01312e23 sw s3,28(sp) +80007e30: 00b12623 sw a1,12(sp) +80007e34: 02112623 sw ra,44(sp) +80007e38: 00050993 mv s3,a0 +80007e3c: e2890913 addi s2,s2,-472 # 80008e28 +80007e40: d0cff0ef jal ra,8000734c <__malloc_lock> +80007e44: 00892783 lw a5,8(s2) +80007e48: 00c12583 lw a1,12(sp) +80007e4c: 0047a483 lw s1,4(a5) +80007e50: 000017b7 lui a5,0x1 +80007e54: fef78413 addi s0,a5,-17 # fef +80007e58: ffc4f493 andi s1,s1,-4 +80007e5c: 40b40433 sub s0,s0,a1 +80007e60: 00940433 add s0,s0,s1 +80007e64: 00c45413 srli s0,s0,0xc +80007e68: fff40413 addi s0,s0,-1 +80007e6c: 00c41413 slli s0,s0,0xc +80007e70: 02f45663 ble a5,s0,80007e9c <_malloc_trim_r+0x84> +80007e74: 00098513 mv a0,s3 +80007e78: cd8ff0ef jal ra,80007350 <__malloc_unlock> +80007e7c: 00000513 li a0,0 +80007e80: 02c12083 lw ra,44(sp) +80007e84: 02812403 lw s0,40(sp) +80007e88: 02412483 lw s1,36(sp) +80007e8c: 02012903 lw s2,32(sp) +80007e90: 01c12983 lw s3,28(sp) +80007e94: 03010113 addi sp,sp,48 +80007e98: 00008067 ret +80007e9c: 00000593 li a1,0 +80007ea0: 00098513 mv a0,s3 +80007ea4: a19ff0ef jal ra,800078bc <_sbrk_r> +80007ea8: 00892783 lw a5,8(s2) +80007eac: 009787b3 add a5,a5,s1 +80007eb0: fcf512e3 bne a0,a5,80007e74 <_malloc_trim_r+0x5c> +80007eb4: 408005b3 neg a1,s0 +80007eb8: 00098513 mv a0,s3 +80007ebc: a01ff0ef jal ra,800078bc <_sbrk_r> +80007ec0: fff00793 li a5,-1 +80007ec4: 02f51c63 bne a0,a5,80007efc <_malloc_trim_r+0xe4> +80007ec8: 00000593 li a1,0 +80007ecc: 00098513 mv a0,s3 +80007ed0: 9edff0ef jal ra,800078bc <_sbrk_r> +80007ed4: 00892703 lw a4,8(s2) +80007ed8: 00f00693 li a3,15 +80007edc: 40e507b3 sub a5,a0,a4 +80007ee0: f8f6dae3 ble a5,a3,80007e74 <_malloc_trim_r+0x5c> +80007ee4: 8381a683 lw a3,-1992(gp) # 800093d8 <__malloc_sbrk_base> +80007ee8: 0017e793 ori a5,a5,1 +80007eec: 00f72223 sw a5,4(a4) +80007ef0: 40d50533 sub a0,a0,a3 +80007ef4: 8ea1a423 sw a0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007ef8: f7dff06f j 80007e74 <_malloc_trim_r+0x5c> +80007efc: 00892783 lw a5,8(s2) +80007f00: 408484b3 sub s1,s1,s0 +80007f04: 0014e493 ori s1,s1,1 +80007f08: 0097a223 sw s1,4(a5) +80007f0c: 8e81a783 lw a5,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f10: 00098513 mv a0,s3 +80007f14: 40878433 sub s0,a5,s0 +80007f18: 8e81a423 sw s0,-1816(gp) # 80009488 <__malloc_current_mallinfo> +80007f1c: c34ff0ef jal ra,80007350 <__malloc_unlock> +80007f20: 00100513 li a0,1 +80007f24: f5dff06f j 80007e80 <_malloc_trim_r+0x68> + +80007f28 <_free_r>: +80007f28: 24058c63 beqz a1,80008180 <_free_r+0x258> +80007f2c: ff010113 addi sp,sp,-16 +80007f30: 00812423 sw s0,8(sp) +80007f34: 00912223 sw s1,4(sp) +80007f38: 00050413 mv s0,a0 +80007f3c: 00058493 mv s1,a1 +80007f40: 00112623 sw ra,12(sp) +80007f44: c08ff0ef jal ra,8000734c <__malloc_lock> +80007f48: ffc4a503 lw a0,-4(s1) +80007f4c: 80009637 lui a2,0x80009 +80007f50: ff848693 addi a3,s1,-8 +80007f54: ffe57793 andi a5,a0,-2 +80007f58: e2860813 addi a6,a2,-472 # 80008e28 +80007f5c: 00f685b3 add a1,a3,a5 +80007f60: 0045a703 lw a4,4(a1) +80007f64: 00882803 lw a6,8(a6) +80007f68: e2860613 addi a2,a2,-472 +80007f6c: ffc77713 andi a4,a4,-4 +80007f70: 00157513 andi a0,a0,1 +80007f74: 06b81063 bne a6,a1,80007fd4 <_free_r+0xac> +80007f78: 00e787b3 add a5,a5,a4 +80007f7c: 02051063 bnez a0,80007f9c <_free_r+0x74> +80007f80: ff84a703 lw a4,-8(s1) +80007f84: 40e686b3 sub a3,a3,a4 +80007f88: 0086a583 lw a1,8(a3) +80007f8c: 00e787b3 add a5,a5,a4 +80007f90: 00c6a703 lw a4,12(a3) +80007f94: 00e5a623 sw a4,12(a1) +80007f98: 00b72423 sw a1,8(a4) +80007f9c: 0017e713 ori a4,a5,1 +80007fa0: 00e6a223 sw a4,4(a3) +80007fa4: 83c1a703 lw a4,-1988(gp) # 800093dc <__malloc_trim_threshold> +80007fa8: 00d62423 sw a3,8(a2) +80007fac: 00e7e863 bltu a5,a4,80007fbc <_free_r+0x94> +80007fb0: 8cc1a583 lw a1,-1844(gp) # 8000946c <__malloc_top_pad> +80007fb4: 00040513 mv a0,s0 +80007fb8: e61ff0ef jal ra,80007e18 <_malloc_trim_r> +80007fbc: 00040513 mv a0,s0 +80007fc0: 00812403 lw s0,8(sp) +80007fc4: 00c12083 lw ra,12(sp) +80007fc8: 00412483 lw s1,4(sp) +80007fcc: 01010113 addi sp,sp,16 +80007fd0: b80ff06f j 80007350 <__malloc_unlock> +80007fd4: 00e5a223 sw a4,4(a1) +80007fd8: 00000813 li a6,0 +80007fdc: 02051663 bnez a0,80008008 <_free_r+0xe0> +80007fe0: ff84a503 lw a0,-8(s1) +80007fe4: 800098b7 lui a7,0x80009 +80007fe8: e3088893 addi a7,a7,-464 # 80008e30 +80007fec: 40a686b3 sub a3,a3,a0 +80007ff0: 00a787b3 add a5,a5,a0 +80007ff4: 0086a503 lw a0,8(a3) +80007ff8: 0b150663 beq a0,a7,800080a4 <_free_r+0x17c> +80007ffc: 00c6a883 lw a7,12(a3) +80008000: 01152623 sw a7,12(a0) +80008004: 00a8a423 sw a0,8(a7) +80008008: 00e58533 add a0,a1,a4 +8000800c: 00452503 lw a0,4(a0) +80008010: 00157513 andi a0,a0,1 +80008014: 02051863 bnez a0,80008044 <_free_r+0x11c> +80008018: 00e787b3 add a5,a5,a4 +8000801c: 0085a703 lw a4,8(a1) +80008020: 08081663 bnez a6,800080ac <_free_r+0x184> +80008024: 80009537 lui a0,0x80009 +80008028: e3050513 addi a0,a0,-464 # 80008e30 +8000802c: 08a71063 bne a4,a0,800080ac <_free_r+0x184> +80008030: 00d62a23 sw a3,20(a2) +80008034: 00d62823 sw a3,16(a2) +80008038: 00e6a623 sw a4,12(a3) +8000803c: 00e6a423 sw a4,8(a3) +80008040: 00100813 li a6,1 +80008044: 0017e713 ori a4,a5,1 +80008048: 00e6a223 sw a4,4(a3) +8000804c: 00f68733 add a4,a3,a5 +80008050: 00f72023 sw a5,0(a4) +80008054: f60814e3 bnez a6,80007fbc <_free_r+0x94> +80008058: 1ff00713 li a4,511 +8000805c: 06f76063 bltu a4,a5,800080bc <_free_r+0x194> +80008060: 0037d793 srli a5,a5,0x3 +80008064: 4027d593 srai a1,a5,0x2 +80008068: 00100713 li a4,1 +8000806c: 00b71733 sll a4,a4,a1 +80008070: 00462583 lw a1,4(a2) +80008074: 00178793 addi a5,a5,1 +80008078: 00379793 slli a5,a5,0x3 +8000807c: 00f607b3 add a5,a2,a5 +80008080: 00b76733 or a4,a4,a1 +80008084: 00e62223 sw a4,4(a2) +80008088: 0007a703 lw a4,0(a5) +8000808c: ff878613 addi a2,a5,-8 +80008090: 00c6a623 sw a2,12(a3) +80008094: 00e6a423 sw a4,8(a3) +80008098: 00d7a023 sw a3,0(a5) +8000809c: 00d72623 sw a3,12(a4) +800080a0: f1dff06f j 80007fbc <_free_r+0x94> +800080a4: 00100813 li a6,1 +800080a8: f61ff06f j 80008008 <_free_r+0xe0> +800080ac: 00c5a583 lw a1,12(a1) +800080b0: 00b72623 sw a1,12(a4) +800080b4: 00e5a423 sw a4,8(a1) +800080b8: f8dff06f j 80008044 <_free_r+0x11c> +800080bc: 0097d593 srli a1,a5,0x9 +800080c0: 00400713 li a4,4 +800080c4: 04b76863 bltu a4,a1,80008114 <_free_r+0x1ec> +800080c8: 0067d713 srli a4,a5,0x6 +800080cc: 03870713 addi a4,a4,56 +800080d0: 00170593 addi a1,a4,1 +800080d4: 00359593 slli a1,a1,0x3 +800080d8: 00b605b3 add a1,a2,a1 +800080dc: ff858513 addi a0,a1,-8 +800080e0: 0005a583 lw a1,0(a1) +800080e4: 08b51463 bne a0,a1,8000816c <_free_r+0x244> +800080e8: 00100793 li a5,1 +800080ec: 40275713 srai a4,a4,0x2 +800080f0: 00e79733 sll a4,a5,a4 +800080f4: 00462783 lw a5,4(a2) +800080f8: 00f76733 or a4,a4,a5 +800080fc: 00e62223 sw a4,4(a2) +80008100: 00a6a623 sw a0,12(a3) +80008104: 00b6a423 sw a1,8(a3) +80008108: 00d52423 sw a3,8(a0) +8000810c: 00d5a623 sw a3,12(a1) +80008110: eadff06f j 80007fbc <_free_r+0x94> +80008114: 01400713 li a4,20 +80008118: 00b76663 bltu a4,a1,80008124 <_free_r+0x1fc> +8000811c: 05b58713 addi a4,a1,91 +80008120: fb1ff06f j 800080d0 <_free_r+0x1a8> +80008124: 05400713 li a4,84 +80008128: 00b76863 bltu a4,a1,80008138 <_free_r+0x210> +8000812c: 00c7d713 srli a4,a5,0xc +80008130: 06e70713 addi a4,a4,110 +80008134: f9dff06f j 800080d0 <_free_r+0x1a8> +80008138: 15400713 li a4,340 +8000813c: 00b76863 bltu a4,a1,8000814c <_free_r+0x224> +80008140: 00f7d713 srli a4,a5,0xf +80008144: 07770713 addi a4,a4,119 +80008148: f89ff06f j 800080d0 <_free_r+0x1a8> +8000814c: 55400513 li a0,1364 +80008150: 07e00713 li a4,126 +80008154: f6b56ee3 bltu a0,a1,800080d0 <_free_r+0x1a8> +80008158: 0127d713 srli a4,a5,0x12 +8000815c: 07c70713 addi a4,a4,124 +80008160: f71ff06f j 800080d0 <_free_r+0x1a8> +80008164: 0085a583 lw a1,8(a1) +80008168: 00b50863 beq a0,a1,80008178 <_free_r+0x250> +8000816c: 0045a703 lw a4,4(a1) +80008170: ffc77713 andi a4,a4,-4 +80008174: fee7e8e3 bltu a5,a4,80008164 <_free_r+0x23c> +80008178: 00c5a503 lw a0,12(a1) +8000817c: f85ff06f j 80008100 <_free_r+0x1d8> +80008180: 00008067 ret + +80008184 <_setlocale_r>: +80008184: ff010113 addi sp,sp,-16 +80008188: 00912223 sw s1,4(sp) +8000818c: 00112623 sw ra,12(sp) +80008190: 00812423 sw s0,8(sp) +80008194: 800094b7 lui s1,0x80009 +80008198: 04060263 beqz a2,800081dc <_setlocale_r+0x58> +8000819c: 800095b7 lui a1,0x80009 +800081a0: 99058593 addi a1,a1,-1648 # 80008990 +800081a4: 00060513 mv a0,a2 +800081a8: 00060413 mv s0,a2 +800081ac: ff8fd0ef jal ra,800059a4 +800081b0: 02050663 beqz a0,800081dc <_setlocale_r+0x58> +800081b4: 98c48593 addi a1,s1,-1652 # 8000898c +800081b8: 00040513 mv a0,s0 +800081bc: fe8fd0ef jal ra,800059a4 +800081c0: 00050e63 beqz a0,800081dc <_setlocale_r+0x58> +800081c4: 800095b7 lui a1,0x80009 +800081c8: 98858593 addi a1,a1,-1656 # 80008988 +800081cc: 00040513 mv a0,s0 +800081d0: fd4fd0ef jal ra,800059a4 +800081d4: 00000793 li a5,0 +800081d8: 00051463 bnez a0,800081e0 <_setlocale_r+0x5c> +800081dc: 98c48793 addi a5,s1,-1652 +800081e0: 00c12083 lw ra,12(sp) +800081e4: 00812403 lw s0,8(sp) +800081e8: 00412483 lw s1,4(sp) +800081ec: 00078513 mv a0,a5 +800081f0: 01010113 addi sp,sp,16 +800081f4: 00008067 ret + +800081f8 <__locale_mb_cur_max>: +800081f8: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +800081fc: 0347a783 lw a5,52(a5) +80008200: 00079663 bnez a5,8000820c <__locale_mb_cur_max+0x14> +80008204: 800097b7 lui a5,0x80009 +80008208: 23078793 addi a5,a5,560 # 80009230 +8000820c: 1287c503 lbu a0,296(a5) +80008210: 00008067 ret + +80008214 <__locale_ctype_ptr_l>: +80008214: 0ec52503 lw a0,236(a0) +80008218: 00008067 ret + +8000821c <__locale_ctype_ptr>: +8000821c: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008220: 0347a783 lw a5,52(a5) +80008224: 00079663 bnez a5,80008230 <__locale_ctype_ptr+0x14> +80008228: 800097b7 lui a5,0x80009 +8000822c: 23078793 addi a5,a5,560 # 80009230 +80008230: 0ec7a503 lw a0,236(a5) +80008234: 00008067 ret + +80008238 : +80008238: 00058613 mv a2,a1 +8000823c: 00050593 mv a1,a0 +80008240: 8341a503 lw a0,-1996(gp) # 800093d4 <_impure_ptr> +80008244: f41ff06f j 80008184 <_setlocale_r> + +80008248 <_mbtowc_r>: +80008248: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +8000824c: 0347a783 lw a5,52(a5) +80008250: 00079663 bnez a5,8000825c <_mbtowc_r+0x14> +80008254: 800097b7 lui a5,0x80009 +80008258: 23078793 addi a5,a5,560 # 80009230 +8000825c: 0e47a303 lw t1,228(a5) +80008260: 00030067 jr t1 + +80008264 <__ascii_mbtowc>: +80008264: 02059a63 bnez a1,80008298 <__ascii_mbtowc+0x34> +80008268: ff010113 addi sp,sp,-16 +8000826c: 00c10593 addi a1,sp,12 +80008270: 00000513 li a0,0 +80008274: 00060e63 beqz a2,80008290 <__ascii_mbtowc+0x2c> +80008278: ffe00513 li a0,-2 +8000827c: 00068a63 beqz a3,80008290 <__ascii_mbtowc+0x2c> +80008280: 00064783 lbu a5,0(a2) +80008284: 00f5a023 sw a5,0(a1) +80008288: 00064503 lbu a0,0(a2) +8000828c: 00a03533 snez a0,a0 +80008290: 01010113 addi sp,sp,16 +80008294: 00008067 ret +80008298: 00000513 li a0,0 +8000829c: 02060063 beqz a2,800082bc <__ascii_mbtowc+0x58> +800082a0: ffe00513 li a0,-2 +800082a4: 00068c63 beqz a3,800082bc <__ascii_mbtowc+0x58> +800082a8: 00064783 lbu a5,0(a2) +800082ac: 00f5a023 sw a5,0(a1) +800082b0: 00064503 lbu a0,0(a2) +800082b4: 00a03533 snez a0,a0 +800082b8: 00008067 ret +800082bc: 00008067 ret + +800082c0 : +800082c0: 00c50733 add a4,a0,a2 +800082c4: 00a5e863 bltu a1,a0,800082d4 +800082c8: 00050793 mv a5,a0 +800082cc: 02e79a63 bne a5,a4,80008300 +800082d0: 00008067 ret +800082d4: 00c587b3 add a5,a1,a2 +800082d8: 40f60633 sub a2,a2,a5 +800082dc: fef576e3 bleu a5,a0,800082c8 +800082e0: 00c786b3 add a3,a5,a2 +800082e4: 00069463 bnez a3,800082ec +800082e8: 00008067 ret +800082ec: fff78793 addi a5,a5,-1 +800082f0: 0007c683 lbu a3,0(a5) +800082f4: fff70713 addi a4,a4,-1 +800082f8: 00d70023 sb a3,0(a4) +800082fc: fe5ff06f j 800082e0 +80008300: 00158593 addi a1,a1,1 +80008304: fff5c683 lbu a3,-1(a1) +80008308: 00178793 addi a5,a5,1 +8000830c: fed78fa3 sb a3,-1(a5) +80008310: fbdff06f j 800082cc + +80008314 : +80008314: ff010113 addi sp,sp,-16 +80008318: 00812423 sw s0,8(sp) +8000831c: 00058413 mv s0,a1 +80008320: 0005a583 lw a1,0(a1) +80008324: 00912223 sw s1,4(sp) +80008328: 00112623 sw ra,12(sp) +8000832c: 00050493 mv s1,a0 +80008330: 00058463 beqz a1,80008338 +80008334: fe1ff0ef jal ra,80008314 +80008338: 00040593 mv a1,s0 +8000833c: 00812403 lw s0,8(sp) +80008340: 00c12083 lw ra,12(sp) +80008344: 00048513 mv a0,s1 +80008348: 00412483 lw s1,4(sp) +8000834c: 01010113 addi sp,sp,16 +80008350: bd9ff06f j 80007f28 <_free_r> + +80008354 <_reclaim_reent>: +80008354: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008358: 10a78263 beq a5,a0,8000845c <_reclaim_reent+0x108> +8000835c: 04c52783 lw a5,76(a0) +80008360: fe010113 addi sp,sp,-32 +80008364: 00812c23 sw s0,24(sp) +80008368: 00912a23 sw s1,20(sp) +8000836c: 01212823 sw s2,16(sp) +80008370: 00112e23 sw ra,28(sp) +80008374: 01312623 sw s3,12(sp) +80008378: 00050413 mv s0,a0 +8000837c: 00000493 li s1,0 +80008380: 08000913 li s2,128 +80008384: 04079463 bnez a5,800083cc <_reclaim_reent+0x78> +80008388: 04042583 lw a1,64(s0) +8000838c: 00058663 beqz a1,80008398 <_reclaim_reent+0x44> +80008390: 00040513 mv a0,s0 +80008394: b95ff0ef jal ra,80007f28 <_free_r> +80008398: 14842583 lw a1,328(s0) +8000839c: 04058c63 beqz a1,800083f4 <_reclaim_reent+0xa0> +800083a0: 14c40493 addi s1,s0,332 +800083a4: 04958863 beq a1,s1,800083f4 <_reclaim_reent+0xa0> +800083a8: 0005a903 lw s2,0(a1) +800083ac: 00040513 mv a0,s0 +800083b0: b79ff0ef jal ra,80007f28 <_free_r> +800083b4: 00090593 mv a1,s2 +800083b8: fedff06f j 800083a4 <_reclaim_reent+0x50> +800083bc: 009585b3 add a1,a1,s1 +800083c0: 0005a583 lw a1,0(a1) +800083c4: 00059e63 bnez a1,800083e0 <_reclaim_reent+0x8c> +800083c8: 00448493 addi s1,s1,4 +800083cc: 04c42583 lw a1,76(s0) +800083d0: ff2496e3 bne s1,s2,800083bc <_reclaim_reent+0x68> +800083d4: 00040513 mv a0,s0 +800083d8: b51ff0ef jal ra,80007f28 <_free_r> +800083dc: fadff06f j 80008388 <_reclaim_reent+0x34> +800083e0: 0005a983 lw s3,0(a1) +800083e4: 00040513 mv a0,s0 +800083e8: b41ff0ef jal ra,80007f28 <_free_r> +800083ec: 00098593 mv a1,s3 +800083f0: fd5ff06f j 800083c4 <_reclaim_reent+0x70> +800083f4: 05442583 lw a1,84(s0) +800083f8: 00058663 beqz a1,80008404 <_reclaim_reent+0xb0> +800083fc: 00040513 mv a0,s0 +80008400: b29ff0ef jal ra,80007f28 <_free_r> +80008404: 03842783 lw a5,56(s0) +80008408: 02078c63 beqz a5,80008440 <_reclaim_reent+0xec> +8000840c: 03c42783 lw a5,60(s0) +80008410: 00040513 mv a0,s0 +80008414: 000780e7 jalr a5 +80008418: 2e042583 lw a1,736(s0) +8000841c: 02058263 beqz a1,80008440 <_reclaim_reent+0xec> +80008420: 00040513 mv a0,s0 +80008424: 01812403 lw s0,24(sp) +80008428: 01c12083 lw ra,28(sp) +8000842c: 01412483 lw s1,20(sp) +80008430: 01012903 lw s2,16(sp) +80008434: 00c12983 lw s3,12(sp) +80008438: 02010113 addi sp,sp,32 +8000843c: ed9ff06f j 80008314 +80008440: 01c12083 lw ra,28(sp) +80008444: 01812403 lw s0,24(sp) +80008448: 01412483 lw s1,20(sp) +8000844c: 01012903 lw s2,16(sp) +80008450: 00c12983 lw s3,12(sp) +80008454: 02010113 addi sp,sp,32 +80008458: 00008067 ret +8000845c: 00008067 ret + +80008460 <_wctomb_r>: +80008460: 8341a783 lw a5,-1996(gp) # 800093d4 <_impure_ptr> +80008464: 0347a783 lw a5,52(a5) +80008468: 00079663 bnez a5,80008474 <_wctomb_r+0x14> +8000846c: 800097b7 lui a5,0x80009 +80008470: 23078793 addi a5,a5,560 # 80009230 +80008474: 0e07a303 lw t1,224(a5) +80008478: 00030067 jr t1 + +8000847c <__ascii_wctomb>: +8000847c: 02058463 beqz a1,800084a4 <__ascii_wctomb+0x28> +80008480: 0ff00793 li a5,255 +80008484: 00c7fa63 bleu a2,a5,80008498 <__ascii_wctomb+0x1c> +80008488: 08a00793 li a5,138 +8000848c: 00f52023 sw a5,0(a0) +80008490: fff00513 li a0,-1 +80008494: 00008067 ret +80008498: 00c58023 sb a2,0(a1) +8000849c: 00100513 li a0,1 +800084a0: 00008067 ret +800084a4: 00000513 li a0,0 +800084a8: 00008067 ret + +Disassembly of section .data: + +800089f0 : +volatile tag_t stop_tag = (tag_t) {.time = FOREVER, .microstep = UINT_MAX}; +800089f0: ffff 0xffff +800089f2: ffff 0xffff +800089f4: ffff 0xffff +800089f6: 7fff 0x7fff +800089f8: ffff 0xffff +800089fa: ffff 0xffff +800089fc: 0000 unimp +800089fe: 0000 unimp + +80008a00 : +80008a00: 0000 unimp +80008a02: 0000 unimp +80008a04: 8cec 0x8cec +80008a06: 8000 0x8000 +80008a08: 8d54 0x8d54 +80008a0a: 8000 0x8000 +80008a0c: 8dbc 0x8dbc +80008a0e: 8000 0x8000 +80008a10: 0000 unimp +80008a12: 0000 unimp +80008a14: 0000 unimp +80008a16: 0000 unimp +80008a18: 0000 unimp +80008a1a: 0000 unimp +80008a1c: 0000 unimp +80008a1e: 0000 unimp +80008a20: 0000 unimp +80008a22: 0000 unimp +80008a24: 0000 unimp +80008a26: 0000 unimp +80008a28: 0000 unimp +80008a2a: 0000 unimp +80008a2c: 0000 unimp +80008a2e: 0000 unimp +80008a30: 0000 unimp +80008a32: 0000 unimp +80008a34: 0000 unimp +80008a36: 0000 unimp +80008a38: 0000 unimp +80008a3a: 0000 unimp +80008a3c: 0000 unimp +80008a3e: 0000 unimp +80008a40: 0000 unimp +80008a42: 0000 unimp +80008a44: 0000 unimp +80008a46: 0000 unimp +80008a48: 0000 unimp +80008a4a: 0000 unimp +80008a4c: 0000 unimp +80008a4e: 0000 unimp +80008a50: 0000 unimp +80008a52: 0000 unimp +80008a54: 0000 unimp +80008a56: 0000 unimp +80008a58: 0000 unimp +80008a5a: 0000 unimp +80008a5c: 0000 unimp +80008a5e: 0000 unimp +80008a60: 0000 unimp +80008a62: 0000 unimp +80008a64: 0000 unimp +80008a66: 0000 unimp +80008a68: 0000 unimp +80008a6a: 0000 unimp +80008a6c: 0000 unimp +80008a6e: 0000 unimp +80008a70: 0000 unimp +80008a72: 0000 unimp +80008a74: 0000 unimp +80008a76: 0000 unimp +80008a78: 0000 unimp +80008a7a: 0000 unimp +80008a7c: 0000 unimp +80008a7e: 0000 unimp +80008a80: 0000 unimp +80008a82: 0000 unimp +80008a84: 0000 unimp +80008a86: 0000 unimp +80008a88: 0000 unimp +80008a8a: 0000 unimp +80008a8c: 0000 unimp +80008a8e: 0000 unimp +80008a90: 0000 unimp +80008a92: 0000 unimp +80008a94: 0000 unimp +80008a96: 0000 unimp +80008a98: 0000 unimp +80008a9a: 0000 unimp +80008a9c: 0000 unimp +80008a9e: 0000 unimp +80008aa0: 0000 unimp +80008aa2: 0000 unimp +80008aa4: 0000 unimp +80008aa6: 0000 unimp +80008aa8: 0001 nop +80008aaa: 0000 unimp +80008aac: 0000 unimp +80008aae: 0000 unimp +80008ab0: 330e fld ft6,224(sp) +80008ab2: abcd j 800090a4 <__malloc_av_+0x27c> +80008ab4: 1234 addi a3,sp,296 +80008ab6: e66d bnez a2,80008ba0 +80008ab8: deec sw a1,124(a3) +80008aba: 0005 c.nop 1 +80008abc: 0000000b 0xb +80008ac0: 0000 unimp +80008ac2: 0000 unimp +80008ac4: 0000 unimp +80008ac6: 0000 unimp +80008ac8: 0000 unimp +80008aca: 0000 unimp +80008acc: 0000 unimp +80008ace: 0000 unimp +80008ad0: 0000 unimp +80008ad2: 0000 unimp +80008ad4: 0000 unimp +80008ad6: 0000 unimp +80008ad8: 0000 unimp +80008ada: 0000 unimp +80008adc: 0000 unimp +80008ade: 0000 unimp +80008ae0: 0000 unimp +80008ae2: 0000 unimp +80008ae4: 0000 unimp +80008ae6: 0000 unimp +80008ae8: 0000 unimp +80008aea: 0000 unimp +80008aec: 0000 unimp +80008aee: 0000 unimp +80008af0: 0000 unimp +80008af2: 0000 unimp +80008af4: 0000 unimp +80008af6: 0000 unimp +80008af8: 0000 unimp +80008afa: 0000 unimp +80008afc: 0000 unimp +80008afe: 0000 unimp +80008b00: 0000 unimp +80008b02: 0000 unimp +80008b04: 0000 unimp +80008b06: 0000 unimp +80008b08: 0000 unimp +80008b0a: 0000 unimp +80008b0c: 0000 unimp +80008b0e: 0000 unimp +80008b10: 0000 unimp +80008b12: 0000 unimp +80008b14: 0000 unimp +80008b16: 0000 unimp +80008b18: 0000 unimp +80008b1a: 0000 unimp +80008b1c: 0000 unimp +80008b1e: 0000 unimp +80008b20: 0000 unimp +80008b22: 0000 unimp +80008b24: 0000 unimp +80008b26: 0000 unimp +80008b28: 0000 unimp +80008b2a: 0000 unimp +80008b2c: 0000 unimp +80008b2e: 0000 unimp +80008b30: 0000 unimp +80008b32: 0000 unimp +80008b34: 0000 unimp +80008b36: 0000 unimp +80008b38: 0000 unimp +80008b3a: 0000 unimp +80008b3c: 0000 unimp +80008b3e: 0000 unimp +80008b40: 0000 unimp +80008b42: 0000 unimp +80008b44: 0000 unimp +80008b46: 0000 unimp +80008b48: 0000 unimp +80008b4a: 0000 unimp +80008b4c: 0000 unimp +80008b4e: 0000 unimp +80008b50: 0000 unimp +80008b52: 0000 unimp +80008b54: 0000 unimp +80008b56: 0000 unimp +80008b58: 0000 unimp +80008b5a: 0000 unimp +80008b5c: 0000 unimp +80008b5e: 0000 unimp +80008b60: 0000 unimp +80008b62: 0000 unimp +80008b64: 0000 unimp +80008b66: 0000 unimp +80008b68: 0000 unimp +80008b6a: 0000 unimp +80008b6c: 0000 unimp +80008b6e: 0000 unimp +80008b70: 0000 unimp +80008b72: 0000 unimp +80008b74: 0000 unimp +80008b76: 0000 unimp +80008b78: 0000 unimp +80008b7a: 0000 unimp +80008b7c: 0000 unimp +80008b7e: 0000 unimp +80008b80: 0000 unimp +80008b82: 0000 unimp +80008b84: 0000 unimp +80008b86: 0000 unimp +80008b88: 0000 unimp +80008b8a: 0000 unimp +80008b8c: 0000 unimp +80008b8e: 0000 unimp +80008b90: 0000 unimp +80008b92: 0000 unimp +80008b94: 0000 unimp +80008b96: 0000 unimp +80008b98: 0000 unimp +80008b9a: 0000 unimp +80008b9c: 0000 unimp +80008b9e: 0000 unimp +80008ba0: 0000 unimp +80008ba2: 0000 unimp +80008ba4: 0000 unimp +80008ba6: 0000 unimp +80008ba8: 0000 unimp +80008baa: 0000 unimp +80008bac: 0000 unimp +80008bae: 0000 unimp +80008bb0: 0000 unimp +80008bb2: 0000 unimp +80008bb4: 0000 unimp +80008bb6: 0000 unimp +80008bb8: 0000 unimp +80008bba: 0000 unimp +80008bbc: 0000 unimp +80008bbe: 0000 unimp +80008bc0: 0000 unimp +80008bc2: 0000 unimp +80008bc4: 0000 unimp +80008bc6: 0000 unimp +80008bc8: 0000 unimp +80008bca: 0000 unimp +80008bcc: 0000 unimp +80008bce: 0000 unimp +80008bd0: 0000 unimp +80008bd2: 0000 unimp +80008bd4: 0000 unimp +80008bd6: 0000 unimp +80008bd8: 0000 unimp +80008bda: 0000 unimp +80008bdc: 0000 unimp +80008bde: 0000 unimp +80008be0: 0000 unimp +80008be2: 0000 unimp +80008be4: 0000 unimp +80008be6: 0000 unimp +80008be8: 0000 unimp +80008bea: 0000 unimp +80008bec: 0000 unimp +80008bee: 0000 unimp +80008bf0: 0000 unimp +80008bf2: 0000 unimp +80008bf4: 0000 unimp +80008bf6: 0000 unimp +80008bf8: 0000 unimp +80008bfa: 0000 unimp +80008bfc: 0000 unimp +80008bfe: 0000 unimp +80008c00: 0000 unimp +80008c02: 0000 unimp +80008c04: 0000 unimp +80008c06: 0000 unimp +80008c08: 0000 unimp +80008c0a: 0000 unimp +80008c0c: 0000 unimp +80008c0e: 0000 unimp +80008c10: 0000 unimp +80008c12: 0000 unimp +80008c14: 0000 unimp +80008c16: 0000 unimp +80008c18: 0000 unimp +80008c1a: 0000 unimp +80008c1c: 0000 unimp +80008c1e: 0000 unimp +80008c20: 0000 unimp +80008c22: 0000 unimp +80008c24: 0000 unimp +80008c26: 0000 unimp +80008c28: 0000 unimp +80008c2a: 0000 unimp +80008c2c: 0000 unimp +80008c2e: 0000 unimp +80008c30: 0000 unimp +80008c32: 0000 unimp +80008c34: 0000 unimp +80008c36: 0000 unimp +80008c38: 0000 unimp +80008c3a: 0000 unimp +80008c3c: 0000 unimp +80008c3e: 0000 unimp +80008c40: 0000 unimp +80008c42: 0000 unimp +80008c44: 0000 unimp +80008c46: 0000 unimp +80008c48: 0000 unimp +80008c4a: 0000 unimp +80008c4c: 0000 unimp +80008c4e: 0000 unimp +80008c50: 0000 unimp +80008c52: 0000 unimp +80008c54: 0000 unimp +80008c56: 0000 unimp +80008c58: 0000 unimp +80008c5a: 0000 unimp +80008c5c: 0000 unimp +80008c5e: 0000 unimp +80008c60: 0000 unimp +80008c62: 0000 unimp +80008c64: 0000 unimp +80008c66: 0000 unimp +80008c68: 0000 unimp +80008c6a: 0000 unimp +80008c6c: 0000 unimp +80008c6e: 0000 unimp +80008c70: 0000 unimp +80008c72: 0000 unimp +80008c74: 0000 unimp +80008c76: 0000 unimp +80008c78: 0000 unimp +80008c7a: 0000 unimp +80008c7c: 0000 unimp +80008c7e: 0000 unimp +80008c80: 0000 unimp +80008c82: 0000 unimp +80008c84: 0000 unimp +80008c86: 0000 unimp +80008c88: 0000 unimp +80008c8a: 0000 unimp +80008c8c: 0000 unimp +80008c8e: 0000 unimp +80008c90: 0000 unimp +80008c92: 0000 unimp +80008c94: 0000 unimp +80008c96: 0000 unimp +80008c98: 0000 unimp +80008c9a: 0000 unimp +80008c9c: 0000 unimp +80008c9e: 0000 unimp +80008ca0: 0000 unimp +80008ca2: 0000 unimp +80008ca4: 0000 unimp +80008ca6: 0000 unimp +80008ca8: 0000 unimp +80008caa: 0000 unimp +80008cac: 0000 unimp +80008cae: 0000 unimp +80008cb0: 0000 unimp +80008cb2: 0000 unimp +80008cb4: 0000 unimp +80008cb6: 0000 unimp +80008cb8: 0000 unimp +80008cba: 0000 unimp +80008cbc: 0000 unimp +80008cbe: 0000 unimp +80008cc0: 0000 unimp +80008cc2: 0000 unimp +80008cc4: 0000 unimp +80008cc6: 0000 unimp +80008cc8: 0000 unimp +80008cca: 0000 unimp +80008ccc: 0000 unimp +80008cce: 0000 unimp +80008cd0: 0000 unimp +80008cd2: 0000 unimp +80008cd4: 0000 unimp +80008cd6: 0000 unimp +80008cd8: 0000 unimp +80008cda: 0000 unimp +80008cdc: 0000 unimp +80008cde: 0000 unimp +80008ce0: 0000 unimp +80008ce2: 0000 unimp +80008ce4: 0000 unimp +80008ce6: 0000 unimp +80008ce8: 0000 unimp +80008cea: 0000 unimp +80008cec: 0000 unimp +80008cee: 0000 unimp +80008cf0: 0000 unimp +80008cf2: 0000 unimp +80008cf4: 0000 unimp +80008cf6: 0000 unimp +80008cf8: 0000 unimp +80008cfa: 0000 unimp +80008cfc: 0000 unimp +80008cfe: 0000 unimp +80008d00: 0000 unimp +80008d02: 0000 unimp +80008d04: 0000 unimp +80008d06: 0000 unimp +80008d08: 0000 unimp +80008d0a: 0000 unimp +80008d0c: 0000 unimp +80008d0e: 0000 unimp +80008d10: 0000 unimp +80008d12: 0000 unimp +80008d14: 0000 unimp +80008d16: 0000 unimp +80008d18: 0000 unimp +80008d1a: 0000 unimp +80008d1c: 0000 unimp +80008d1e: 0000 unimp +80008d20: 0000 unimp +80008d22: 0000 unimp +80008d24: 0000 unimp +80008d26: 0000 unimp +80008d28: 0000 unimp +80008d2a: 0000 unimp +80008d2c: 0000 unimp +80008d2e: 0000 unimp +80008d30: 0000 unimp +80008d32: 0000 unimp +80008d34: 0000 unimp +80008d36: 0000 unimp +80008d38: 0000 unimp +80008d3a: 0000 unimp +80008d3c: 0000 unimp +80008d3e: 0000 unimp +80008d40: 0000 unimp +80008d42: 0000 unimp +80008d44: 0000 unimp +80008d46: 0000 unimp +80008d48: 0000 unimp +80008d4a: 0000 unimp +80008d4c: 0000 unimp +80008d4e: 0000 unimp +80008d50: 0000 unimp +80008d52: 0000 unimp +80008d54: 0000 unimp +80008d56: 0000 unimp +80008d58: 0000 unimp +80008d5a: 0000 unimp +80008d5c: 0000 unimp +80008d5e: 0000 unimp +80008d60: 0000 unimp +80008d62: 0000 unimp +80008d64: 0000 unimp +80008d66: 0000 unimp +80008d68: 0000 unimp +80008d6a: 0000 unimp +80008d6c: 0000 unimp +80008d6e: 0000 unimp +80008d70: 0000 unimp +80008d72: 0000 unimp +80008d74: 0000 unimp +80008d76: 0000 unimp +80008d78: 0000 unimp +80008d7a: 0000 unimp +80008d7c: 0000 unimp +80008d7e: 0000 unimp +80008d80: 0000 unimp +80008d82: 0000 unimp +80008d84: 0000 unimp +80008d86: 0000 unimp +80008d88: 0000 unimp +80008d8a: 0000 unimp +80008d8c: 0000 unimp +80008d8e: 0000 unimp +80008d90: 0000 unimp +80008d92: 0000 unimp +80008d94: 0000 unimp +80008d96: 0000 unimp +80008d98: 0000 unimp +80008d9a: 0000 unimp +80008d9c: 0000 unimp +80008d9e: 0000 unimp +80008da0: 0000 unimp +80008da2: 0000 unimp +80008da4: 0000 unimp +80008da6: 0000 unimp +80008da8: 0000 unimp +80008daa: 0000 unimp +80008dac: 0000 unimp +80008dae: 0000 unimp +80008db0: 0000 unimp +80008db2: 0000 unimp +80008db4: 0000 unimp +80008db6: 0000 unimp +80008db8: 0000 unimp +80008dba: 0000 unimp +80008dbc: 0000 unimp +80008dbe: 0000 unimp +80008dc0: 0000 unimp +80008dc2: 0000 unimp +80008dc4: 0000 unimp +80008dc6: 0000 unimp +80008dc8: 0000 unimp +80008dca: 0000 unimp +80008dcc: 0000 unimp +80008dce: 0000 unimp +80008dd0: 0000 unimp +80008dd2: 0000 unimp +80008dd4: 0000 unimp +80008dd6: 0000 unimp +80008dd8: 0000 unimp +80008dda: 0000 unimp +80008ddc: 0000 unimp +80008dde: 0000 unimp +80008de0: 0000 unimp +80008de2: 0000 unimp +80008de4: 0000 unimp +80008de6: 0000 unimp +80008de8: 0000 unimp +80008dea: 0000 unimp +80008dec: 0000 unimp +80008dee: 0000 unimp +80008df0: 0000 unimp +80008df2: 0000 unimp +80008df4: 0000 unimp +80008df6: 0000 unimp +80008df8: 0000 unimp +80008dfa: 0000 unimp +80008dfc: 0000 unimp +80008dfe: 0000 unimp +80008e00: 0000 unimp +80008e02: 0000 unimp +80008e04: 0000 unimp +80008e06: 0000 unimp +80008e08: 0000 unimp +80008e0a: 0000 unimp +80008e0c: 0000 unimp +80008e0e: 0000 unimp +80008e10: 0000 unimp +80008e12: 0000 unimp +80008e14: 0000 unimp +80008e16: 0000 unimp +80008e18: 0000 unimp +80008e1a: 0000 unimp +80008e1c: 0000 unimp +80008e1e: 0000 unimp +80008e20: 0000 unimp +80008e22: 0000 unimp +80008e24: 0000 unimp +80008e26: 0000 unimp + +80008e28 <__malloc_av_>: +80008e28: 0000 unimp +80008e2a: 0000 unimp +80008e2c: 0000 unimp +80008e2e: 0000 unimp +80008e30: 8e28 0x8e28 +80008e32: 8000 0x8000 +80008e34: 8e28 0x8e28 +80008e36: 8000 0x8000 +80008e38: 8e30 0x8e30 +80008e3a: 8000 0x8000 +80008e3c: 8e30 0x8e30 +80008e3e: 8000 0x8000 +80008e40: 8e38 0x8e38 +80008e42: 8000 0x8000 +80008e44: 8e38 0x8e38 +80008e46: 8000 0x8000 +80008e48: 8e40 0x8e40 +80008e4a: 8000 0x8000 +80008e4c: 8e40 0x8e40 +80008e4e: 8000 0x8000 +80008e50: 8e48 0x8e48 +80008e52: 8000 0x8000 +80008e54: 8e48 0x8e48 +80008e56: 8000 0x8000 +80008e58: 8e50 0x8e50 +80008e5a: 8000 0x8000 +80008e5c: 8e50 0x8e50 +80008e5e: 8000 0x8000 +80008e60: 8e58 0x8e58 +80008e62: 8000 0x8000 +80008e64: 8e58 0x8e58 +80008e66: 8000 0x8000 +80008e68: 8e60 0x8e60 +80008e6a: 8000 0x8000 +80008e6c: 8e60 0x8e60 +80008e6e: 8000 0x8000 +80008e70: 8e68 0x8e68 +80008e72: 8000 0x8000 +80008e74: 8e68 0x8e68 +80008e76: 8000 0x8000 +80008e78: 8e70 0x8e70 +80008e7a: 8000 0x8000 +80008e7c: 8e70 0x8e70 +80008e7e: 8000 0x8000 +80008e80: 8e78 0x8e78 +80008e82: 8000 0x8000 +80008e84: 8e78 0x8e78 +80008e86: 8000 0x8000 +80008e88: 8e80 0x8e80 +80008e8a: 8000 0x8000 +80008e8c: 8e80 0x8e80 +80008e8e: 8000 0x8000 +80008e90: 8e88 0x8e88 +80008e92: 8000 0x8000 +80008e94: 8e88 0x8e88 +80008e96: 8000 0x8000 +80008e98: 8e90 0x8e90 +80008e9a: 8000 0x8000 +80008e9c: 8e90 0x8e90 +80008e9e: 8000 0x8000 +80008ea0: 8e98 0x8e98 +80008ea2: 8000 0x8000 +80008ea4: 8e98 0x8e98 +80008ea6: 8000 0x8000 +80008ea8: 8ea0 0x8ea0 +80008eaa: 8000 0x8000 +80008eac: 8ea0 0x8ea0 +80008eae: 8000 0x8000 +80008eb0: 8ea8 0x8ea8 +80008eb2: 8000 0x8000 +80008eb4: 8ea8 0x8ea8 +80008eb6: 8000 0x8000 +80008eb8: 8eb0 0x8eb0 +80008eba: 8000 0x8000 +80008ebc: 8eb0 0x8eb0 +80008ebe: 8000 0x8000 +80008ec0: 8eb8 0x8eb8 +80008ec2: 8000 0x8000 +80008ec4: 8eb8 0x8eb8 +80008ec6: 8000 0x8000 +80008ec8: 8ec0 0x8ec0 +80008eca: 8000 0x8000 +80008ecc: 8ec0 0x8ec0 +80008ece: 8000 0x8000 +80008ed0: 8ec8 0x8ec8 +80008ed2: 8000 0x8000 +80008ed4: 8ec8 0x8ec8 +80008ed6: 8000 0x8000 +80008ed8: 8ed0 0x8ed0 +80008eda: 8000 0x8000 +80008edc: 8ed0 0x8ed0 +80008ede: 8000 0x8000 +80008ee0: 8ed8 0x8ed8 +80008ee2: 8000 0x8000 +80008ee4: 8ed8 0x8ed8 +80008ee6: 8000 0x8000 +80008ee8: 8ee0 0x8ee0 +80008eea: 8000 0x8000 +80008eec: 8ee0 0x8ee0 +80008eee: 8000 0x8000 +80008ef0: 8ee8 0x8ee8 +80008ef2: 8000 0x8000 +80008ef4: 8ee8 0x8ee8 +80008ef6: 8000 0x8000 +80008ef8: 8ef0 0x8ef0 +80008efa: 8000 0x8000 +80008efc: 8ef0 0x8ef0 +80008efe: 8000 0x8000 +80008f00: 8ef8 0x8ef8 +80008f02: 8000 0x8000 +80008f04: 8ef8 0x8ef8 +80008f06: 8000 0x8000 +80008f08: 8f00 0x8f00 +80008f0a: 8000 0x8000 +80008f0c: 8f00 0x8f00 +80008f0e: 8000 0x8000 +80008f10: 8f08 0x8f08 +80008f12: 8000 0x8000 +80008f14: 8f08 0x8f08 +80008f16: 8000 0x8000 +80008f18: 8f10 0x8f10 +80008f1a: 8000 0x8000 +80008f1c: 8f10 0x8f10 +80008f1e: 8000 0x8000 +80008f20: 8f18 0x8f18 +80008f22: 8000 0x8000 +80008f24: 8f18 0x8f18 +80008f26: 8000 0x8000 +80008f28: 8f20 0x8f20 +80008f2a: 8000 0x8000 +80008f2c: 8f20 0x8f20 +80008f2e: 8000 0x8000 +80008f30: 8f28 0x8f28 +80008f32: 8000 0x8000 +80008f34: 8f28 0x8f28 +80008f36: 8000 0x8000 +80008f38: 8f30 0x8f30 +80008f3a: 8000 0x8000 +80008f3c: 8f30 0x8f30 +80008f3e: 8000 0x8000 +80008f40: 8f38 0x8f38 +80008f42: 8000 0x8000 +80008f44: 8f38 0x8f38 +80008f46: 8000 0x8000 +80008f48: 8f40 0x8f40 +80008f4a: 8000 0x8000 +80008f4c: 8f40 0x8f40 +80008f4e: 8000 0x8000 +80008f50: 8f48 0x8f48 +80008f52: 8000 0x8000 +80008f54: 8f48 0x8f48 +80008f56: 8000 0x8000 +80008f58: 8f50 0x8f50 +80008f5a: 8000 0x8000 +80008f5c: 8f50 0x8f50 +80008f5e: 8000 0x8000 +80008f60: 8f58 0x8f58 +80008f62: 8000 0x8000 +80008f64: 8f58 0x8f58 +80008f66: 8000 0x8000 +80008f68: 8f60 0x8f60 +80008f6a: 8000 0x8000 +80008f6c: 8f60 0x8f60 +80008f6e: 8000 0x8000 +80008f70: 8f68 0x8f68 +80008f72: 8000 0x8000 +80008f74: 8f68 0x8f68 +80008f76: 8000 0x8000 +80008f78: 8f70 0x8f70 +80008f7a: 8000 0x8000 +80008f7c: 8f70 0x8f70 +80008f7e: 8000 0x8000 +80008f80: 8f78 0x8f78 +80008f82: 8000 0x8000 +80008f84: 8f78 0x8f78 +80008f86: 8000 0x8000 +80008f88: 8f80 0x8f80 +80008f8a: 8000 0x8000 +80008f8c: 8f80 0x8f80 +80008f8e: 8000 0x8000 +80008f90: 8f88 0x8f88 +80008f92: 8000 0x8000 +80008f94: 8f88 0x8f88 +80008f96: 8000 0x8000 +80008f98: 8f90 0x8f90 +80008f9a: 8000 0x8000 +80008f9c: 8f90 0x8f90 +80008f9e: 8000 0x8000 +80008fa0: 8f98 0x8f98 +80008fa2: 8000 0x8000 +80008fa4: 8f98 0x8f98 +80008fa6: 8000 0x8000 +80008fa8: 8fa0 0x8fa0 +80008faa: 8000 0x8000 +80008fac: 8fa0 0x8fa0 +80008fae: 8000 0x8000 +80008fb0: 8fa8 0x8fa8 +80008fb2: 8000 0x8000 +80008fb4: 8fa8 0x8fa8 +80008fb6: 8000 0x8000 +80008fb8: 8fb0 0x8fb0 +80008fba: 8000 0x8000 +80008fbc: 8fb0 0x8fb0 +80008fbe: 8000 0x8000 +80008fc0: 8fb8 0x8fb8 +80008fc2: 8000 0x8000 +80008fc4: 8fb8 0x8fb8 +80008fc6: 8000 0x8000 +80008fc8: 8fc0 0x8fc0 +80008fca: 8000 0x8000 +80008fcc: 8fc0 0x8fc0 +80008fce: 8000 0x8000 +80008fd0: 8fc8 0x8fc8 +80008fd2: 8000 0x8000 +80008fd4: 8fc8 0x8fc8 +80008fd6: 8000 0x8000 +80008fd8: 8fd0 0x8fd0 +80008fda: 8000 0x8000 +80008fdc: 8fd0 0x8fd0 +80008fde: 8000 0x8000 +80008fe0: 8fd8 0x8fd8 +80008fe2: 8000 0x8000 +80008fe4: 8fd8 0x8fd8 +80008fe6: 8000 0x8000 +80008fe8: 8fe0 0x8fe0 +80008fea: 8000 0x8000 +80008fec: 8fe0 0x8fe0 +80008fee: 8000 0x8000 +80008ff0: 8fe8 0x8fe8 +80008ff2: 8000 0x8000 +80008ff4: 8fe8 0x8fe8 +80008ff6: 8000 0x8000 +80008ff8: 8ff0 0x8ff0 +80008ffa: 8000 0x8000 +80008ffc: 8ff0 0x8ff0 +80008ffe: 8000 0x8000 +80009000: 8ff8 0x8ff8 +80009002: 8000 0x8000 +80009004: 8ff8 0x8ff8 +80009006: 8000 0x8000 +80009008: 9000 0x9000 +8000900a: 8000 0x8000 +8000900c: 9000 0x9000 +8000900e: 8000 0x8000 +80009010: 9008 0x9008 +80009012: 8000 0x8000 +80009014: 9008 0x9008 +80009016: 8000 0x8000 +80009018: 9010 0x9010 +8000901a: 8000 0x8000 +8000901c: 9010 0x9010 +8000901e: 8000 0x8000 +80009020: 9018 0x9018 +80009022: 8000 0x8000 +80009024: 9018 0x9018 +80009026: 8000 0x8000 +80009028: 9020 0x9020 +8000902a: 8000 0x8000 +8000902c: 9020 0x9020 +8000902e: 8000 0x8000 +80009030: 9028 0x9028 +80009032: 8000 0x8000 +80009034: 9028 0x9028 +80009036: 8000 0x8000 +80009038: 9030 0x9030 +8000903a: 8000 0x8000 +8000903c: 9030 0x9030 +8000903e: 8000 0x8000 +80009040: 9038 0x9038 +80009042: 8000 0x8000 +80009044: 9038 0x9038 +80009046: 8000 0x8000 +80009048: 9040 0x9040 +8000904a: 8000 0x8000 +8000904c: 9040 0x9040 +8000904e: 8000 0x8000 +80009050: 9048 0x9048 +80009052: 8000 0x8000 +80009054: 9048 0x9048 +80009056: 8000 0x8000 +80009058: 9050 0x9050 +8000905a: 8000 0x8000 +8000905c: 9050 0x9050 +8000905e: 8000 0x8000 +80009060: 9058 0x9058 +80009062: 8000 0x8000 +80009064: 9058 0x9058 +80009066: 8000 0x8000 +80009068: 9060 0x9060 +8000906a: 8000 0x8000 +8000906c: 9060 0x9060 +8000906e: 8000 0x8000 +80009070: 9068 0x9068 +80009072: 8000 0x8000 +80009074: 9068 0x9068 +80009076: 8000 0x8000 +80009078: 9070 0x9070 +8000907a: 8000 0x8000 +8000907c: 9070 0x9070 +8000907e: 8000 0x8000 +80009080: 9078 0x9078 +80009082: 8000 0x8000 +80009084: 9078 0x9078 +80009086: 8000 0x8000 +80009088: 9080 0x9080 +8000908a: 8000 0x8000 +8000908c: 9080 0x9080 +8000908e: 8000 0x8000 +80009090: 9088 0x9088 +80009092: 8000 0x8000 +80009094: 9088 0x9088 +80009096: 8000 0x8000 +80009098: 9090 0x9090 +8000909a: 8000 0x8000 +8000909c: 9090 0x9090 +8000909e: 8000 0x8000 +800090a0: 9098 0x9098 +800090a2: 8000 0x8000 +800090a4: 9098 0x9098 +800090a6: 8000 0x8000 +800090a8: 90a0 0x90a0 +800090aa: 8000 0x8000 +800090ac: 90a0 0x90a0 +800090ae: 8000 0x8000 +800090b0: 90a8 0x90a8 +800090b2: 8000 0x8000 +800090b4: 90a8 0x90a8 +800090b6: 8000 0x8000 +800090b8: 90b0 0x90b0 +800090ba: 8000 0x8000 +800090bc: 90b0 0x90b0 +800090be: 8000 0x8000 +800090c0: 90b8 0x90b8 +800090c2: 8000 0x8000 +800090c4: 90b8 0x90b8 +800090c6: 8000 0x8000 +800090c8: 90c0 0x90c0 +800090ca: 8000 0x8000 +800090cc: 90c0 0x90c0 +800090ce: 8000 0x8000 +800090d0: 90c8 0x90c8 +800090d2: 8000 0x8000 +800090d4: 90c8 0x90c8 +800090d6: 8000 0x8000 +800090d8: 90d0 0x90d0 +800090da: 8000 0x8000 +800090dc: 90d0 0x90d0 +800090de: 8000 0x8000 +800090e0: 90d8 0x90d8 +800090e2: 8000 0x8000 +800090e4: 90d8 0x90d8 +800090e6: 8000 0x8000 +800090e8: 90e0 0x90e0 +800090ea: 8000 0x8000 +800090ec: 90e0 0x90e0 +800090ee: 8000 0x8000 +800090f0: 90e8 0x90e8 +800090f2: 8000 0x8000 +800090f4: 90e8 0x90e8 +800090f6: 8000 0x8000 +800090f8: 90f0 0x90f0 +800090fa: 8000 0x8000 +800090fc: 90f0 0x90f0 +800090fe: 8000 0x8000 +80009100: 90f8 0x90f8 +80009102: 8000 0x8000 +80009104: 90f8 0x90f8 +80009106: 8000 0x8000 +80009108: 9100 0x9100 +8000910a: 8000 0x8000 +8000910c: 9100 0x9100 +8000910e: 8000 0x8000 +80009110: 9108 0x9108 +80009112: 8000 0x8000 +80009114: 9108 0x9108 +80009116: 8000 0x8000 +80009118: 9110 0x9110 +8000911a: 8000 0x8000 +8000911c: 9110 0x9110 +8000911e: 8000 0x8000 +80009120: 9118 0x9118 +80009122: 8000 0x8000 +80009124: 9118 0x9118 +80009126: 8000 0x8000 +80009128: 9120 0x9120 +8000912a: 8000 0x8000 +8000912c: 9120 0x9120 +8000912e: 8000 0x8000 +80009130: 9128 0x9128 +80009132: 8000 0x8000 +80009134: 9128 0x9128 +80009136: 8000 0x8000 +80009138: 9130 0x9130 +8000913a: 8000 0x8000 +8000913c: 9130 0x9130 +8000913e: 8000 0x8000 +80009140: 9138 0x9138 +80009142: 8000 0x8000 +80009144: 9138 0x9138 +80009146: 8000 0x8000 +80009148: 9140 0x9140 +8000914a: 8000 0x8000 +8000914c: 9140 0x9140 +8000914e: 8000 0x8000 +80009150: 9148 0x9148 +80009152: 8000 0x8000 +80009154: 9148 0x9148 +80009156: 8000 0x8000 +80009158: 9150 0x9150 +8000915a: 8000 0x8000 +8000915c: 9150 0x9150 +8000915e: 8000 0x8000 +80009160: 9158 0x9158 +80009162: 8000 0x8000 +80009164: 9158 0x9158 +80009166: 8000 0x8000 +80009168: 9160 0x9160 +8000916a: 8000 0x8000 +8000916c: 9160 0x9160 +8000916e: 8000 0x8000 +80009170: 9168 0x9168 +80009172: 8000 0x8000 +80009174: 9168 0x9168 +80009176: 8000 0x8000 +80009178: 9170 0x9170 +8000917a: 8000 0x8000 +8000917c: 9170 0x9170 +8000917e: 8000 0x8000 +80009180: 9178 0x9178 +80009182: 8000 0x8000 +80009184: 9178 0x9178 +80009186: 8000 0x8000 +80009188: 9180 0x9180 +8000918a: 8000 0x8000 +8000918c: 9180 0x9180 +8000918e: 8000 0x8000 +80009190: 9188 0x9188 +80009192: 8000 0x8000 +80009194: 9188 0x9188 +80009196: 8000 0x8000 +80009198: 9190 0x9190 +8000919a: 8000 0x8000 +8000919c: 9190 0x9190 +8000919e: 8000 0x8000 +800091a0: 9198 0x9198 +800091a2: 8000 0x8000 +800091a4: 9198 0x9198 +800091a6: 8000 0x8000 +800091a8: 91a0 0x91a0 +800091aa: 8000 0x8000 +800091ac: 91a0 0x91a0 +800091ae: 8000 0x8000 +800091b0: 91a8 0x91a8 +800091b2: 8000 0x8000 +800091b4: 91a8 0x91a8 +800091b6: 8000 0x8000 +800091b8: 91b0 0x91b0 +800091ba: 8000 0x8000 +800091bc: 91b0 0x91b0 +800091be: 8000 0x8000 +800091c0: 91b8 0x91b8 +800091c2: 8000 0x8000 +800091c4: 91b8 0x91b8 +800091c6: 8000 0x8000 +800091c8: 91c0 0x91c0 +800091ca: 8000 0x8000 +800091cc: 91c0 0x91c0 +800091ce: 8000 0x8000 +800091d0: 91c8 0x91c8 +800091d2: 8000 0x8000 +800091d4: 91c8 0x91c8 +800091d6: 8000 0x8000 +800091d8: 91d0 0x91d0 +800091da: 8000 0x8000 +800091dc: 91d0 0x91d0 +800091de: 8000 0x8000 +800091e0: 91d8 0x91d8 +800091e2: 8000 0x8000 +800091e4: 91d8 0x91d8 +800091e6: 8000 0x8000 +800091e8: 91e0 0x91e0 +800091ea: 8000 0x8000 +800091ec: 91e0 0x91e0 +800091ee: 8000 0x8000 +800091f0: 91e8 0x91e8 +800091f2: 8000 0x8000 +800091f4: 91e8 0x91e8 +800091f6: 8000 0x8000 +800091f8: 91f0 0x91f0 +800091fa: 8000 0x8000 +800091fc: 91f0 0x91f0 +800091fe: 8000 0x8000 +80009200: 91f8 0x91f8 +80009202: 8000 0x8000 +80009204: 91f8 0x91f8 +80009206: 8000 0x8000 +80009208: 9200 0x9200 +8000920a: 8000 0x8000 +8000920c: 9200 0x9200 +8000920e: 8000 0x8000 +80009210: 9208 0x9208 +80009212: 8000 0x8000 +80009214: 9208 0x9208 +80009216: 8000 0x8000 +80009218: 9210 0x9210 +8000921a: 8000 0x8000 +8000921c: 9210 0x9210 +8000921e: 8000 0x8000 +80009220: 9218 0x9218 +80009222: 8000 0x8000 +80009224: 9218 0x9218 +80009226: 8000 0x8000 +80009228: 9220 0x9220 +8000922a: 8000 0x8000 +8000922c: 9220 0x9220 +8000922e: 8000 0x8000 + +80009230 <__global_locale>: +80009230: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009234: 0000 unimp +80009236: 0000 unimp +80009238: 0000 unimp +8000923a: 0000 unimp +8000923c: 0000 unimp +8000923e: 0000 unimp +80009240: 0000 unimp +80009242: 0000 unimp +80009244: 0000 unimp +80009246: 0000 unimp +80009248: 0000 unimp +8000924a: 0000 unimp +8000924c: 0000 unimp +8000924e: 0000 unimp +80009250: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009254: 0000 unimp +80009256: 0000 unimp +80009258: 0000 unimp +8000925a: 0000 unimp +8000925c: 0000 unimp +8000925e: 0000 unimp +80009260: 0000 unimp +80009262: 0000 unimp +80009264: 0000 unimp +80009266: 0000 unimp +80009268: 0000 unimp +8000926a: 0000 unimp +8000926c: 0000 unimp +8000926e: 0000 unimp +80009270: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009274: 0000 unimp +80009276: 0000 unimp +80009278: 0000 unimp +8000927a: 0000 unimp +8000927c: 0000 unimp +8000927e: 0000 unimp +80009280: 0000 unimp +80009282: 0000 unimp +80009284: 0000 unimp +80009286: 0000 unimp +80009288: 0000 unimp +8000928a: 0000 unimp +8000928c: 0000 unimp +8000928e: 0000 unimp +80009290: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +80009294: 0000 unimp +80009296: 0000 unimp +80009298: 0000 unimp +8000929a: 0000 unimp +8000929c: 0000 unimp +8000929e: 0000 unimp +800092a0: 0000 unimp +800092a2: 0000 unimp +800092a4: 0000 unimp +800092a6: 0000 unimp +800092a8: 0000 unimp +800092aa: 0000 unimp +800092ac: 0000 unimp +800092ae: 0000 unimp +800092b0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092b4: 0000 unimp +800092b6: 0000 unimp +800092b8: 0000 unimp +800092ba: 0000 unimp +800092bc: 0000 unimp +800092be: 0000 unimp +800092c0: 0000 unimp +800092c2: 0000 unimp +800092c4: 0000 unimp +800092c6: 0000 unimp +800092c8: 0000 unimp +800092ca: 0000 unimp +800092cc: 0000 unimp +800092ce: 0000 unimp +800092d0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092d4: 0000 unimp +800092d6: 0000 unimp +800092d8: 0000 unimp +800092da: 0000 unimp +800092dc: 0000 unimp +800092de: 0000 unimp +800092e0: 0000 unimp +800092e2: 0000 unimp +800092e4: 0000 unimp +800092e6: 0000 unimp +800092e8: 0000 unimp +800092ea: 0000 unimp +800092ec: 0000 unimp +800092ee: 0000 unimp +800092f0: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne +800092f4: 0000 unimp +800092f6: 0000 unimp +800092f8: 0000 unimp +800092fa: 0000 unimp +800092fc: 0000 unimp +800092fe: 0000 unimp +80009300: 0000 unimp +80009302: 0000 unimp +80009304: 0000 unimp +80009306: 0000 unimp +80009308: 0000 unimp +8000930a: 0000 unimp +8000930c: 0000 unimp +8000930e: 0000 unimp +80009310: 847c 0x847c +80009312: 8000 0x8000 +80009314: 8264 0x8264 +80009316: 8000 0x8000 +80009318: 0000 unimp +8000931a: 0000 unimp +8000931c: 8754 0x8754 +8000931e: 8000 0x8000 +80009320: 8998 0x8998 +80009322: 8000 0x8000 +80009324: 8988 0x8988 +80009326: 8000 0x8000 +80009328: 8988 0x8988 +8000932a: 8000 0x8000 +8000932c: 8988 0x8988 +8000932e: 8000 0x8000 +80009330: 8988 0x8988 +80009332: 8000 0x8000 +80009334: 8988 0x8988 +80009336: 8000 0x8000 +80009338: 8988 0x8988 +8000933a: 8000 0x8000 +8000933c: 8988 0x8988 +8000933e: 8000 0x8000 +80009340: 8988 0x8988 +80009342: 8000 0x8000 +80009344: 8988 0x8988 +80009346: 8000 0x8000 +80009348: ffff 0xffff +8000934a: ffff 0xffff +8000934c: ffff 0xffff +8000934e: ffff 0xffff +80009350: ffff 0xffff +80009352: ffff 0xffff +80009354: ffff 0xffff +80009356: 0000 unimp +80009358: 0001 nop +8000935a: 5341 li t1,-16 +8000935c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009360: 0000 unimp +80009362: 0000 unimp +80009364: 0000 unimp +80009366: 0000 unimp +80009368: 0000 unimp +8000936a: 0000 unimp +8000936c: 0000 unimp +8000936e: 0000 unimp +80009370: 0000 unimp +80009372: 0000 unimp +80009374: 0000 unimp +80009376: 0000 unimp +80009378: 0000 unimp +8000937a: 5341 li t1,-16 +8000937c: 00494943 fmadd.s fs2,fs2,ft4,ft0,rmm +80009380: 0000 unimp +80009382: 0000 unimp +80009384: 0000 unimp +80009386: 0000 unimp +80009388: 0000 unimp +8000938a: 0000 unimp +8000938c: 0000 unimp +8000938e: 0000 unimp +80009390: 0000 unimp +80009392: 0000 unimp +80009394: 0000 unimp +80009396: 0000 unimp +80009398: 0000 unimp +8000939a: 0000 unimp diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.riscv b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.riscv new file mode 100755 index 0000000..9d1d5fa Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.riscv differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_0.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_0.pkl new file mode 100644 index 0000000..cb4858d Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_0.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_1.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_1.pkl new file mode 100644 index 0000000..d933706 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_1.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_2.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_2.pkl new file mode 100644 index 0000000..66a47e5 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_2.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_3.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_3.pkl new file mode 100644 index 0000000..a730386 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_3.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_4.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_4.pkl new file mode 100644 index 0000000..2a811f2 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_4.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_5.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_5.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_5.pkl differ diff --git a/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_6.pkl b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_6.pkl new file mode 100644 index 0000000..b6ef2f8 Binary files /dev/null and b/analyzer/expdir/lf/demo_robot/DefaultRV32Config/1600s/9/demo_robot.sid_6.pkl differ diff --git a/analyzer/experiment.py b/analyzer/experiment.py deleted file mode 100644 index 6e3d542..0000000 --- a/analyzer/experiment.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: UTF-8 -*- -import os -import sys -import pickle -import warnings -import argparse - - -from extract_stamp import extract_stamp -from log_parse import log_parse -from timing import get_execution_durations - - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("dir", metavar="DIR", type=str, - help="folder path for") - parser.add_argument("name", metavar='N', type=str, - help="binary name, assume other files have the same name with different suffixs") - parser.add_argument("--sid", nargs='+', type=int, - help='stamp id', required=False) - parser.add_argument("--dump", metavar="D", type=str, - help="dump to certain files") - parser.add_argument("--quiet", "-q", action="store_true", - help="disable printing results") - - args = parser.parse_args() - - print(args.sid) - - - prefix = os.path.join(args.dir, args.name) - - # check all possible stamp ids, default 0 - stamp_ids = args.sid - if (stamp_ids is None): - stamp_ids = [0, ] - if (len(stamp_ids) == 0): - stamp_ids = [0, ] - - for _sid in stamp_ids: - - # get annotations - annot_fpath = "{}.dump.annot".format(prefix) - (start_stamp, end_stamp) = extract_stamp(annot_fpath, stamp_id=1) - print("(start_stamp, end_stamp) = ", (start_stamp, end_stamp)) - - if (start_stamp is None or - end_stamp is None): - warnings.warn("cannot find magic stamp") - exit() - - # parse logs with annotations - log_fpath = "{}.log".format(prefix) - logs = log_parse(log_fpath, start_stamp=start_stamp, end_stamp=end_stamp) - - # get execution durations - execution_durations = get_execution_durations(logs) - - if (args.quiet is not True): - print(execution_durations) - - if (args.dump is not None): - print(args.dump) - dump_fpath = "{}.timing.pkl".format(prefix) - _dump_f = open(dump_fpath, "wb") - pickle.dump(execution_durations, _dump_f) - _dump_f.close() diff --git a/analyzer/extract_stamp.py b/analyzer/extract_stamp.py index fd8e23a..14c21f4 100644 --- a/analyzer/extract_stamp.py +++ b/analyzer/extract_stamp.py @@ -18,8 +18,9 @@ def extract_stamp(filename, stamp_id=0): assert type(filename) == str, TypeError assert type(stamp_id) == int, TypeError + print("\n\n") print("=" * 64) - print("Extracing [" + filename + "]") + print("Extracing [" + filename + "], seeking stamp id {}".format(stamp_id)) print("=" * 64) _f = open(filename, "r") diff --git a/analyzer/log_parse.py b/analyzer/log_parse.py index 1f8903c..d7aca1c 100644 --- a/analyzer/log_parse.py +++ b/analyzer/log_parse.py @@ -21,6 +21,7 @@ def log_parse(filename, start_stamp, end_stamp): assert type(start_stamp) == str, TypeError assert type(end_stamp) == str, TypeError + print("\n\n") print("=" * 64) print("Extracing [" + filename + "]") print("=" * 64) diff --git a/analyzer/main.py b/analyzer/main.py index 604455c..a84dbcd 100644 --- a/analyzer/main.py +++ b/analyzer/main.py @@ -16,7 +16,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("dir", metavar="DIR", type=str, - help="folder path for") + help="folder path for binary, asm and trace") parser.add_argument("name", metavar='N', type=str, help="binary name, assume other files have the same name with different suffixs") parser.add_argument("--sid", nargs='+', type=int, @@ -30,8 +30,6 @@ args = parser.parse_args() - print(args.sid) - prefix = os.path.join(args.dir, args.name) @@ -47,7 +45,8 @@ # get annotations annot_fpath = "{}.dump.annot".format(prefix) (start_stamp, end_stamp) = extract_stamp(annot_fpath, stamp_id=_sid) - print("(start_stamp, end_stamp) = ", (start_stamp, end_stamp)) + if (args.quiet is not True): + print("(start_stamp, end_stamp) = ", (start_stamp, end_stamp)) if (start_stamp is None or end_stamp is None): @@ -67,8 +66,8 @@ print(execution_durations) if (args.dump is True): - print(args.dump) - dump_fpath = "{}.sid{}.pkl".format(prefix, _sid) + # print(args.dump) + dump_fpath = "{}.sid_{}.pkl".format(prefix, _sid) _dump_f = open(dump_fpath, "wb") pickle.dump(execution_durations, _dump_f) _dump_f.close() diff --git a/analyzer/scripts/ctest/median-stream.sh b/analyzer/scripts/ctest/median-stream.sh new file mode 100644 index 0000000..836b0ae --- /dev/null +++ b/analyzer/scripts/ctest/median-stream.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +cd /dta-cps/analyzer + +# PROCESSOR=Scratchpad512KBRV32Config +PROCESSOR=DefaultRV32Config + + +WORKLOAD=median-stream +EMULATOR=$ROCKET/emulator/emulator-freechips.rocketchip.system-${PROCESSOR} +echo "${EMULATOR}" + +EXP_DIR=expdir/ctest/${WORKLOAD}/${PROCESSOR}// + +SRC_DIR="/dta-cps/workload/ctest/${WORKLOAD}/" + +mkdir -p ${EXP_DIR} && \ +cp ${SRC_DIR}/${WORKLOAD}.riscv ${EXP_DIR} && \ +cp ${SRC_DIR}/${WORKLOAD}.dump.annot ${EXP_DIR} + +ls $EXP_DIR + + +${EMULATOR} +verbose ${EXP_DIR}/${WORKLOAD}.riscv 2>${EXP_DIR}/${WORKLOAD}.log; \ +python3 /dta-cps/analyzer/main.py ${EXP_DIR} ${WORKLOAD} --dump --sid 0 diff --git a/analyzer/scripts/lf/demo_robot.sh b/analyzer/scripts/lf/demo_robot.sh new file mode 100644 index 0000000..a92ee5b --- /dev/null +++ b/analyzer/scripts/lf/demo_robot.sh @@ -0,0 +1,17 @@ +#!/bin/bash + + +PROCESSOR=DefaultRV32Config +EXP=0 +EXP_DIR=expdir/${PROCESSOR}/${EXP}/ + +SEC=800 +EMULATOR=$ROCKET/emulator/emulator-freechips.rocketchip.system-${PROCESSOR} + +mkdir -p ${EXP_DIR} && \ +cp /dta-cps/workload/lf/demo_robot/demo_robot.riscv ${EXP_DIR} && \ +cp /dta-cps/workload/lf/demo_robot/demo_robot.dump.annot ${EXP_DIR} && \ +timeout ${SEC}s ${EMULATOR} +verbose ${EXP_DIR}/demo_robot.riscv 2>${EXP_DIR}demo_robot.log; \ +python3 /dta-cps/analyzer/main.py ${EXP_DIR} demo_robot --dump --sid 0 1 2 3 4 5 6 + +time python3 /dta-cps/analyzer/main.py ${EXP_DIR} demo_robot --dump --sid 0 1 2 3 4 5 6 diff --git a/workload/ctest/median-stream/Makefile b/workload/ctest/median-stream/Makefile new file mode 100644 index 0000000..188e1a9 --- /dev/null +++ b/workload/ctest/median-stream/Makefile @@ -0,0 +1,40 @@ + +XLEN ?= 32 + + +src_dir = ../../../ + +RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf- +RISCV_GCC ?= $(RISCV_PREFIX)gcc + +RISCV_GCC_OPTS ?= \ + -DPREALLOCATE=1 -mcmodel=medany -static \ + -std=gnu99 \ + -Og -g \ + -ffast-math -fno-common -fno-builtin-printf + +RISCV_LINK ?= $(RISCV_GCC) -T $(src_dir)lib/common/link.ld $(incs) +RISCV_LINK_OPTS ?= -static -nostartfiles -lm -lgcc -T $(src_dir)lib/common/link.ld + +RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.text.init --section=.data + +incs += -I$(src_dir)lib/common + +median-stream.riscv: $(wildcard ./*.c) $(wildcard $(src_dir)lib/common/*.c) $(wildcard $(src_dir)lib/common/*.S) + $(RISCV_GCC) $(incs) $(RISCV_GCC_OPTS) $(RISCV_LINK_OPTS) -o $@ \ + $(wildcard ./*.c) \ + $(wildcard $(src_dir)lib/common/*.c) $(wildcard $(src_dir)lib/common/*.S) + +median-stream.dump: median-stream.riscv + $(RISCV_OBJDUMP) $< > $@ + +median-stream.dump.annot: median-stream.riscv + $(RISCV_OBJDUMP) -S $< > $@ + +all: median-stream.riscv median-stream.dump median-stream.dump.annot + +clean: + -rm -rf *.riscv *.dump *.dump.annot + + + diff --git a/workload/ctest/median-stream/dataset1.h b/workload/ctest/median-stream/dataset1.h new file mode 100644 index 0000000..00d3a05 --- /dev/null +++ b/workload/ctest/median-stream/dataset1.h @@ -0,0 +1,17 @@ +// See LICENSE for license details. + + +#define DATA_SIZE 40 + +int input_data[DATA_SIZE] = +{ + 41, 454, 833, 335, 564, 1, 187, 989, 749, 365, 350, 572, 132, 64, 949, 153, 584, 216, 805, 140, + 621, 210, 6, 572, 931, 339, 890, 593, 392, 898, 694, 228, 961, 12, 110, 883, 116, 750, 296, 646 +}; + +int verify_data[DATA_SIZE] = +{ + 0, 454, 454, 564, 335, 187, 187, 749, 749, 365, 365, 350, 132, 132, 153, 584, 216, 584, 216, 621, + 210, 210, 210, 572, 572, 890, 593, 593, 593, 694, 694, 694, 228, 110, 110, 116, 750, 296, 646, 426 +}; + diff --git a/workload/ctest/median-stream/median-stream.c b/workload/ctest/median-stream/median-stream.c new file mode 100644 index 0000000..e1e252e --- /dev/null +++ b/workload/ctest/median-stream/median-stream.c @@ -0,0 +1,86 @@ +// See LICENSE for license details. + +//************************************************************************** +// Median filter bencmark +//-------------------------------------------------------------------------- +// +// This benchmark performs a 1D three element median filter. The +// input data (and reference data) should be generated using the +// median_gendata.pl perl script and dumped to a file named +// dataset1.h. + +#include "util.h" + +#include "median.h" + +//-------------------------------------------------------------------------- +// Input/Reference Data +//-------------------------------------------------------------------------- + +#include "dataset1.h" + +//-------------------------------------------------------------------------- +// Median filter (c version) +//-------------------------------------------------------------------------- +void median( int n, int input[], int results[] ) +{ + int A, B, C, i; + + // Zero the ends + results[0] = 0; + results[n-1] = 0; + + // Do the filter + for ( i = 1; i < (n-1); i++ ) { + + A = input[i-1]; + B = input[i]; + C = input[i+1]; + + if ( A < B ) { + if ( B < C ) + results[i] = B; + else if ( C < A ) + results[i] = A; + else + results[i] = C; + } + + else { + if ( A < C ) + results[i] = A; + else if ( C < B ) + results[i] = B; + else + results[i] = C; + } + + } + +} + + + + + + + +//-------------------------------------------------------------------------- +// Main + +int main( int argc, char* argv[] ) +{ + int results_data[DATA_SIZE]; + + + // Do the filter + for (int i = 0; i < 10; ++i) + { +magic_start_stamp(0) + median( DATA_SIZE, input_data, results_data ); +magic_end_stamp(0) + } + + // Check the results + return verify( DATA_SIZE, results_data, verify_data ); +} diff --git a/workload/ctest/median-stream/median.h b/workload/ctest/median-stream/median.h new file mode 100644 index 0000000..6a6f8d1 --- /dev/null +++ b/workload/ctest/median-stream/median.h @@ -0,0 +1,8 @@ +// See LICENSE for license details. + +//************************************************************************** +// Median filters +//-------------------------------------------------------------------------- + +// Simple C version +void median( int n, int input[], int results[] );